以下是最小的示例,展示了这个错误
(defn f ^double []) (f) => NullPointerException
在反编译函数 f
时,我发现以下返回表达式
return null.doubleValue();
这发生在Java交互场景中,其中被调用的Java方法没有返回值,但处于Clojure原始函数的返回位置。
编译器应该在编译时检查null
。
另一个例子 - 以void作为最后一个表达式调用方法也会以类似的方式失败
(defn f ^double [^SomeClassToAvoidRuntimeReflection obj, x, y] (.someMethod obj, x, y)) (f obj, x, y) => NullPointerException