如何在原始类型上调用多方法?

8

我希望我的程序在原始类型和它们的包装类之间表现不同,例如:

(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

那么,能否分派多方法在原始类型上?

======编辑======

我正在将Google Guava封装到Clojure中。其中有一个原始库,例如Booleans、Doubles、Ints等。它们有一些共同的方法,所以我想尝试使用多方法。


你能解释一下为什么你想这样做吗?目前在原语上进行调度是不可能的,但很可能有一种实现相同目标的好方法(谷歌“XY问题”)。 - mikera
1个回答

4
不,目前无法实现。函数的参数(例如多方法调度函数)要么是对象(因此原语将被装箱),要么是原始的长/双精度浮点数(因此对象将被拆箱)。您的场景需要一个函数,可以接受任何一种参数类型并在函数内保留该区别。
话虽如此,可能有解决您尝试解决的实际问题的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接