如何在 Clojure 中制作 Java 泛型对象?

How to make a Java object of generic type, in Clojure?

Clojure empty 改变了 Java 集合的类型。 例如 JavaParser MethodCallExpr 对象 mce,

(type (.getArguments mce))
;; => com.github.javaparser.ast.NodeList
(type (emtpy (.getArguments mce)))
;; => nil
(type (into (empty (.getArguments mce)) (.getArguments mce)))
;; => clojure.lang.PersistentList

但是(.setArguments mce ???)需要???成为NodeList<Expression>,那么如何在clojure中创建对象???

谢谢!

empty 仅适用于实现 clojure.lang.IPersistentCollection 的 classes。它对其他任何东西都不起作用。

在您的情况下,如果您知道类型是 NodeList,只需通过 Java 互操作自行构造它。 如果在某些一般情况下你不知道它是 NodeList,那你就倒霉了,因为你不能基于一个假设它是一个集合 class 来构造一个任意的实例 class.