首页 > 解决方案 > 将类型符号转换为 java.lang.Class 实例

问题描述

这是我的问题:假设我需要clojure.reflect :as r然后,例如,做

(->> (r/reflect java.lang.String)
                :members
                (filter #(= (:name %) 'getBytes))
                first
                :return-type)

这将评估byte<>哪个是符号。type-symbol-to-class如何将该符号映射到 Java类,即如何编写一个函数

(assert
  (= (class (byte-array [1 2 3]))
     (type-symbol-to-class 'byte<>))) 

不抛出异常?如果该功能适用​​于更多符号而不仅仅是byte<>.

标签: clojure

解决方案


Clojure 反射库做了很多工作(123)来美化输出(包括参数/返回类型名称),并且进行反向转换并不是一项简单的任务。

如果你需要一个Class对象,你可以使用 Java 的反射工具来代替clojure.reflect

(= (->> java.lang.String
        .getDeclaredMethods
        (filter #(= (.getName %) "getBytes"))
        first
        .getReturnType)
   (class (byte-array [1 2 3]))) # -> true

推荐阅读