【发布时间】:2015-09-18 15:37:26
【问题描述】:
我想从 Clojure 调用一个重载的 Java 方法,传入 null(或 Clojure 中的 nil)有特殊含义。如果参数是nil,我将如何确保调用正确的 Java 方法?
例如假设重载的Java方法如下:
public class Foo {
public String bar(String s) {
return (s == null) ? "default" : s;
}
public String bar(Integer i) {
return (i == null) ? "0" : i.toString();
}
}
我想产生值"default",所以我想在我的 Clojure 代码中执行以下操作:
(.bar (Foo.) (cast String nil))
我在两个略有不同的环境中对此进行了测试,但我没有得到一致的结果。而且似乎在 Clojure 中转换 nil 值不会产生预期的类型,例如--
(type (cast String nil))
; => nil
【问题讨论】:
-
有趣。您希望这在 Java 中如何解决?
-
在 Java 中,可以只执行
new Foo().bar((String) null);以确保调用正确的重载方法(即方法签名中带有String的方法)。 -
类型提示可以解决问题。请参阅stackoverflow.com/questions/2722856/… 的已接受答案
-
感谢@nberger,输入提示成功了:D
标签: clojure