Kafka Consumer 钻石运算符无法推断参数

Kafka Consumer diamond operator cannot infer arguments

我正在创建一个 Kafka 消费者。提到的一段代码在我的示例 POC 项目中 运行 没问题。

不知何故,当我在我的项目应用程序中使用它时,它给出了 无法解析 Diamond Operator 的错误。

项目代码

private Consumer<Long, String> createConsumer(String topicName) {
    final Properties props = new Properties();
    // todo: use @Value instead of hardcodes
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
    props.put(ConsumerConfig.GROUP_ID_CONFIG, "application");
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class.getName());
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
    props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");
    props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");

    final Consumer<Long, String> consumer = new KafkaConsumer<>(props);
    consumer.subscribe(Collections.singletonList(topicName));
    return consumer;
}

错误快照

您的代码中不需要菱形运算符。将错误行更改为此

KafkaConsumer consumer = new KafkaConsumer(props);

return 类型应从 Consumer<Long, String> 更改为 KafkaConsumer。其余所有代码都很好,您可以按原样使用消费者。

只要您导入 java.util.function.Consumer(具有一种通用类型)这不是 KafkaConsumer 实现的接口,就可以重现。您需要导入正确的:

org.apache.kafka.clients.consumer.Consumer

这个有两个通用类型,应该可以正常工作,不会出现编译错误。

final Consumer<Long, String> consumer = new KafkaConsumer<>(props);