如何在 clojure 中添加类型提示以修复“无法解析ctor”反射警告,即调用构造函数?

fra*_*ure 7 clojure clojure-java-interop

以下示例函数使用 Clojure 的 Java 互操作的特殊形式来调用类构造函数,会导致反射警告:

(defn test-reflection-err []
  (new java.util.HashMap {}))
Run Code Online (Sandbox Code Playgroud)

该消息内容如下:

Reflection warning, /Users/ethan/Projects/scicloj/tablecloth.time/src/tablecloth/time/index.clj:26:3 - call to java.util.HashMap ctor can't be resolved.
Run Code Online (Sandbox Code Playgroud)

我试过放置类型提示来避免这种情况,但不确定将它们放置在哪里以防止反射错误。有谁知道如何做到这一点?

我试过了:

(defn test-reflection-err []
  (^TreeMap new java.util.HashMap {}))
Run Code Online (Sandbox Code Playgroud)

(defn test-reflection-err []
  (doto ^TreeMap (new java.util.HashMap {})))
Run Code Online (Sandbox Code Playgroud)

Lee*_*Lee 5

您需要向构造函数参数添加提示:

(let [^java.util.Map m {}]
  (new java.util.HashMap m))
Run Code Online (Sandbox Code Playgroud)