小编knu*_*uth的帖子

坚持使用clojure中的类型提示进行泛型类

我试图从一个在clojure中运行的Apache flink中得到一个小例子,但是现在我被卡住了,因为clojure中的类型暗示和flink中的一些奇怪的怪癖.

这是我的代码:

(ns pipeline.core
 (:import
 (org.apache.flink.api.java ExecutionEnvironment)
 (org.apache.flink.api.common.functions FlatMapFunction)
 (org.apache.flink.api.java.tuple Tuple2)
 (org.apache.flink.util Collector)
 (java.lang String)))

(def flink-env (ExecutionEnvironment/createLocalEnvironment))

(def dataset (.fromElements flink-env (to-array ["please test me"])))

(defn tokenizer [] (reify FlatMapFunction
                 ( flatMap [this value collector] 
                   (println value))))

(.flatMap dataset (tokenizer))
Run Code Online (Sandbox Code Playgroud)

如果我不提供类型提示,我从flink api收到错误:

Caused by: java.lang.IllegalArgumentException: The types of the interface org.apache.flink.api.common.functions.FlatMapFunction could not be inferred. Support for synthetic interfaces, lambdas, and generic types is limited at this point.
at org.apache.flink.api.java.typeutils.TypeExtractor.getParameterType(TypeExtractor.java:662)
Run Code Online (Sandbox Code Playgroud)

如果我提供类型提示:

(defn tokenizer [] (reify FlatMapFunction
                 ( ^void …
Run Code Online (Sandbox Code Playgroud)

generics clojure type-hinting clojure-java-interop apache-flink

5
推荐指数
1
解决办法
1423
查看次数