9

我在不导入/需要/使用任何其他包的命名空间中具有此功能:

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

草书(IntelliJ IDEA IDE 插件)突出显示Throwable并给我消息Cannot disambiguate overloads of Throwable。我用Exceptionand得到同样的信息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"]]
4

1 回答 1

12

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

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

添加类型提示以msg指定您希望使用的重载将消除反射的需要,并有望使 Cursive 平静下来。

(defn crash [^String msg]
  (throw (Throwable. msg)))
于 2015-09-09T07:33:52.107 回答