如何在clojure中实例化Stream.Builder类?(使用Java9)
我将按照此示例启动Stream.Builder: 然而,我得到的是:如何在clojure中实例化Stream.Builder类?(使用Java9),clojure,Clojure,我将按照此示例启动Stream.Builder: 然而,我得到的是: Unhandled java.lang.IncompatibleClassChangeError Method java.util.stream.Stream.builder()Ljava/util/stream/Stream$Builder; must be InterfaceMethodref constant 有什么我遗漏的吗?快速研究让我想到了这个问题: 因此,解决方法如下所述: (import 'java
Unhandled java.lang.IncompatibleClassChangeError
Method
java.util.stream.Stream.builder()Ljava/util/stream/Stream$Builder;
must be InterfaceMethodref constant
有什么我遗漏的吗?快速研究让我想到了这个问题: 因此,解决方法如下所述:
(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"]
我在Java9上工作
所以我想我们应该等待clojure中的修复。字符串或流生成器?->我按照这个示例启动一个String.Builder:Stream.Builder。谢谢你的关注。你也检查了你的流类路径了吗?(导入java.util.stream.stream)我没有问题,我正在使用Java9。我会试试java 8是的,试试我用的是java和clojure 8
(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"]