Как отправить мультиметод на примитивные типы?
Я хочу, чтобы моя программа работала по-разному между примитивными типами и их классами-обертками, например:
(defmulti try-type class)
(defmethod try-type Integer [arg]
(println "Integer"))
(defmethod try-type Integer/TYPE [arg]
(println "int"))
Но это не работает, хотя я пробую Integer и Int оба
user=> (try-type (.intValue (int 2)))
Integer
nil
user=> (try-type (int 2))
Integer
nil
Итак, возможно ли отправить мультиметод на примитивные типы?
====== ======EDIT
я оборачивал гуаву гугл в clojure. В ней есть примитивная библиотека, такая как Booleans, Dobules, Ints и т. Д. У них есть несколько общих методов, поэтому я хочу попробовать multimethod.
1 ответ
Нет, в настоящее время это невозможно. Аргументом к функции (такой как функция отправки мультиметода) является либо Объект (таким образом примитивы будут упакованы), либо примитив long/double (таким образом, Объекты будут распакованы). Ваш сценарий требует функции, которая может принять и сохранить это различие внутри функции.
Тем не менее, могут быть решения любой проблемы, которую вы пытаетесь решить.