我在名称空间中使用此函数,不会导入/要求/使用任何其他包:
(defn crash [msg]
(throw (Throwable. msg)))
Cursive(IntelliJ IDEA IDE插件)突出显示Throwable
,并向我显示消息Cannot disambiguate overloads of Throwable
。我收到了与Exception
和Error
相同的消息。
我不理解这条消息的来源 - 我怀疑这些Java类是在除Java语言之外的任何其他jar文件中定义的。我可以做些什么来消除这个消息?
这些在project.clj
:
:dependencies [[org.clojure/clojure "1.6.0"]
[net.mikera/imagez "0.8.0"]
[org.clojure/math.numeric-tower "0.0.4"]]
答案 0 :(得分:9)
Throwable
有两个1-arg构造函数(doc):一个期望String
,另一个期望Throwable
。
在运行时Clojure计算出来(因为在这种特定情况下,对象不可能同时是String
和Throwable
),但这需要使用反射。
向msg
添加一个类型提示以指定您希望使用哪个重载将消除对反射的需要,并希望平息Cursive。
(defn crash [^String msg]
(throw (Throwable. msg)))