Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在clojure中实例化Stream.Builder类?(使用Java9)_Clojure - Fatal编程技术网

如何在clojure中实例化Stream.Builder类?(使用Java9)

如何在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

我将按照此示例启动Stream.Builder:

然而,我得到的是:

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