如何在Clojure中消除歧义

时间:2015-09-09 07:01:52

标签: clojure cursive

我在名称空间中使用此函数,不会导入/要求/使用任何其他包:

(defn crash [msg]
  (throw (Throwable. msg)))

Cursive(IntelliJ IDEA IDE插件)突出显示Throwable,并向我显示消息Cannot disambiguate overloads of Throwable。我收到了与ExceptionError相同的消息。

我不理解这条消息的来源 - 我怀疑这些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"]]

1 个答案:

答案 0 :(得分:9)

Throwable有两个1-arg构造函数(doc):一个期望String,另一个期望Throwable

在运行时Clojure计算出来(因为在这种特定情况下,对象不可能同时是StringThrowable),但这需要使用反射。

msg添加一个类型提示以指定您希望使用哪个重载将消除对反射的需要,并希望平息Cursive。

(defn crash [^String msg]
  (throw (Throwable. msg)))