Как отправить мультиметод на примитивные типы?

Я хочу, чтобы моя программа работала по-разному между примитивными типами и их классами-обертками, например:

(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 (таким образом, Объекты будут распакованы). Ваш сценарий требует функции, которая может принять и сохранить это различие внутри функции.

Тем не менее, могут быть решения любой проблемы, которую вы пытаетесь решить.

Другие вопросы по тегам