Преобразование символа типа в экземпляр java.lang.Class - PullRequest
0 голосов
/ 31 мая 2018

Вот моя проблема: предположим, что мне нужно clojure.reflect :as r, а затем, например, сделать

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

. Это даст byte<>, что является символом.Как я могу сопоставить этот символ с классом Java, то есть, как я могу написать функцию type-symbol-to-class так, чтобы

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

не вызывало исключение?Хорошо, если эта функция работает с большим количеством символов, чем просто byte<>.

1 Ответ

0 голосов
/ 31 мая 2018

Библиотека отражений Clojure выполняет большую работу ( 1 , 2 , 3 ) для предварительного вывода результатов (включая имена аргументов / возвращаемых типов) иобратное преобразование не простая задача.

Если вам нужен объект Class, вы можете просто использовать инструменты отражения Java вместо clojure.reflect:

(= (->> java.lang.String
        .getDeclaredMethods
        (filter #(= (.getName %) "getBytes"))
        first
        .getReturnType)
   (class (byte-array [1 2 3]))) # -> true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...