要用Java创建kafka流状态存储,我可以这样做:
final KGroupedStream<String, String> wordCounts = textLines
.flatMapValues(value -> Arrays.asList(pattern.split(value.toLowerCase())))
.groupBy((key, word) -> word);
wordCounts.count(Materialized.<String, Long, KeyValueStore<Bytes, byte[]>>as(WORD_COUNT_STORE));
我试图把它转换成Kotlin,就像这样:
val wordCounts: KGroupedStream<String, String> = textLines
.flatMapValues({value -> value.split("\\W+") })
.groupBy({ _, word -> word})
wordCounts.count(Materialized.<String, Long, KeyValueStore<Bytes, Array<Byte>>>as(WORD_COUNT_STORE))
但是,我收到以下编译器错误:
Interface KeyValueStore does not have constructors
我需要做什么?
答案 0 :(得分:2)
由于as
是Kotlin中的保留字,因此请尝试使用反引号围绕as
,即
`as`
答案 1 :(得分:2)
以防其他人使用它,以及拉曼建议的反引号,我还必须进行其他一些更改:
as
方法之后而不是在Materialized
类之后直接指定泛型类型。Array<Byte>
而不是使用ByteArray
。因此对我有用的全部代码是:
wordCounts.count(Materialized.`as`<String, Long, KeyValueStore<Bytes, ByteArray>>(WORD_COUNT_STORE))