9

他のパッケージをインポート/要求/使用しない名前空間にこの関数があります:

(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"]]
4

1 に答える 1

12

Throwable1 引数のコンストラクタ ( doc )が 2 つStringありThrowableます。

実行時にClojureはそれを把握します(この特定のケースでは、オブジェクトが aStringと a の両方になることは不可能であるためThrowable)が、これにはリフレクションを使用する必要があります。

タイプヒントを追加して、msg使用するオーバーロードを指定すると、リフレクションの必要がなくなり、Cursive が落ち着くことが期待されます。

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