我按照此示例启动 Stream.Builder:
http://www.java2s.com/Tutorials/Java/java.util.stream/Stream.Builder/Stream.Builder.build_.htm
(def b (doto (Stream/builder)
(.accept "a")
(.accept "b")
(.accept "c")
(.accept "d")
(.accept "e")))
但是,我得到了这个:
Unhandled java.lang.IncompatibleClassChangeError
Method
java.util.stream.Stream.builder()Ljava/util/stream/Stream$Builder;
must be InterfaceMethodref constant
我有什么遗漏的吗?
最佳答案
快速研究让我发现了这个问题: https://dev.clojure.org/jira/browse/CLJ-2284
因此解决方法如下所述:
(import 'java.util.stream.Stream)
(defmacro interface-static-call
[sym & argtypes]
`(let [m# (.getMethod ~(symbol (namespace sym))
~(name sym)
(into-array Class ~argtypes))]
(fn [& args#]
(.invoke m# nil (to-array args#)))))
(doto ((interface-static-call Stream/builder))
(.accept "a")
(.accept "b")
(.accept "c")
(.accept "d")
(.accept "e"))
;;=> #object[java.util.stream.Streams$StreamBuilderImpl 0x121300ed "java.util.stream.Streams$StreamBuilderImpl@121300ed"]
在 java 9 上对我有用
所以我想我们应该等待 clojure 的修复。
关于clojure - 如何在 clojure 中实例化 Stream.Builder 类? (使用java 9),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49574394/