将类型符号转换为java.lang.Class实例

Rul*_*lle 3 clojure

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

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

这将评估byte<>哪个是符号.我怎么可以映射符号到Java类,那就是,我怎么能写一个函数type-symbol-to-class,使得

(assert
  (= (class (byte-array [1 2 3]))
     (type-symbol-to-class 'byte<>))) 
Run Code Online (Sandbox Code Playgroud)

不抛出异常?如果该函数适用于更多符号而不仅仅是好的byte<>.

Ale*_*eph 7

Clojure的反射库做了很多工作(的1,2,3),以美化输出(包括参数/返回类型名称),并且它不是一个简单的任务来执行反向变换.

如果需要Class对象,可以使用Java的反射工具而不是clojure.reflect:

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