gpt4 book ai didi

clojure - 在 Clojure 中转换为 nil

转载 作者:行者123 更新时间:2023-12-04 02:18:24 30 4
gpt4 key购买 nike

我想从 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

最佳答案

cast 并没有按照您的想法进行操作,它只是确保第二个参数属于指定的类并返回它(第二个参数,而不是类)或抛出异常。

需要添加类型提示,但不能直接添加到nil:

=> (String. nil)
CompilerException java.lang.IllegalArgumentException: More than one matching method found: java.lang.String

这里我有一个异常,因为 nil 匹配了太多的重载,编译器不知道该选择哪个。

=> (let [^String cnil nil] (String. cnil))
NullPointerException java.lang.String.<init> (String.java:152)

这里我有一个异常(exception),但来自构造函数:类型提示允许编译器选择适当的重载(该重载提示传递了一个 nil...)。

关于clojure - 在 Clojure 中转换为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32641762/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com