【发布时间】:2018-05-03 00:12:35
【问题描述】:
我有以下代码:
source
.mapValues(value -> value + " Stream it!!!")
.print(Printed.toSysOut());
如您所见,mapValues 需要一个 lambda 表达式。
现在,我正在使用 Java 库,但应用程序是用 Scala 编写的。如何将 Scala lambda 传递给 Java 代码?
我尝试了以下方法:
source
.mapValues(value => value + "hello")
.print(Printed.toSysOut)
但是编译器抱怨:
[error] (x$1: org.apache.kafka.streams.kstream.Printed[String,?0(in value x$1)])Unit <and>
[error] (x$1: org.apache.kafka.streams.kstream.KeyValueMapper[_ >: String, _ >: ?0(in value x$1), String])Unit <and>
[error] (x$1: String)Unit
[error] cannot be applied to (org.apache.kafka.streams.kstream.Printed[Nothing,Nothing])
[error] .print(Printed.toSysOut)
[error] ^
[error] two errors found
[error] (compile:compileIncremental) Compilation failed
[error] Total time: 2 s, completed Nov 19, 2017 7:53:44 PM
【问题讨论】:
-
通常 Scala 的类型比 Java 更严格,所以在调用 Java 函数时经常需要指定泛型类型参数。
标签: java scala lambda scala-java-interop