Мне нужно передать лямбда-функцию в качестве параметра конструктору или методу в файле конфигурации YAML для потока (будет использоваться Apache Storm).
Например, скажем, я хочу создать экземплярorg.apache.storm.kafka.spout.ByTopicRecordTranslator
.У него есть конструктор со следующей подписью:
public ByTopicRecordTranslator(Func<ConsumerRecord<K, V>, List<Object>> func, Fields fields)
В Java я бы создал его так:
ByTopicRecordTranslator<String, String> translator = new ByTopicRecordTranslator<>((K) -> new Values(K.value()), new Fields("oneOrMoreStrings"));
Но я не могу понять, как это сделатьв файле конфигурации потока YAML.Вот код, который я попытался выполнить, но он потерпел неудачу:
- id: "field"
className: "org.apache.storm.tuple.Fields"
constructorArgs:
- ["oneOrMoreStrings"]
- id: "KafkaMessageTranslator"
className: "org.apache.storm.kafka.spout.ByTopicRecordTranslator"
constructorArgs:
- (K) -> new Values(K.value())
- ref: "field"
Вот ошибка, которую я получил:
Exception in thread "main" java.lang.IllegalArgumentException: Couldn't find a suitable constructor for class 'org.apache.storm.kafka.spout.ByTopicRecordTranslator' with arguments '[(K) -> new Values(K.value()), [oneOrMoreStrings]]'.
at org.apache.storm.flux.FluxBuilder.buildObject(FluxBuilder.java:358)
at org.apache.storm.flux.FluxBuilder.buildComponents(FluxBuilder.java:421)
at org.apache.storm.flux.FluxBuilder.buildTopology(FluxBuilder.java:101)
at some.package.KafkaConsumerTestTopology.main(KafkaConsumerTestTopology.java:20)
Я не могу найти информацию об этом в документах flux.Я вполне уверен, что это связано с тем, как я форматирую лямбду.
Как передать лямбда-функцию в качестве параметра конструктору или методу в файле конфигурации YAML для потока?