[英]Error : cannot infer type arguments for ProducerRecord<>
(如果你看到一些英语问题,我很抱歉,我是法国人!)
我对使用 kafka 的 Java Projet 中的方法有疑问。 我有一个价格数据库,我想在删除价格时向 kafka 发送一条包含价格所有信息的消息。
在我的 Endpoint.java 中,我有一个 deleteById(idPrix) 的方法:
@DeleteMapping
@RequestMapping(value ="/delete{idPrix}")
public Mono<Void> deleteById (@RequestParam(required = true, name = "idPrix") Long idPrix){
return priceservice.deleteById(idPrix).map( data -> {
ProducerRecord<String, Price> producerRecord = new ProducerRecord<>(TOPIC, idPrix.toString(), data );
kafkaTemplate.send(producerRecord);
return null;
});
}
我收到此消息:无法推断 ProducerRecord<> 的类型 arguments
我已经尝试了很多不同的方法来使它工作,但没有成功。 如果有人看到问题出在哪里,那就太好了。
希望这还不算晚,只是希望将来参考。 跳到第 2 节以获得实际答案,第 1 节试图解释错误消息的一般意义。
因此,每当您遇到cannot infer type arguments for something...
这意味着您正在解析错误的类型,这显然是行不通的。
在您的情况下,让我们尝试逐个理解片段: Mono<Void>
---- 这意味着 Mono 是一个接受通用类型的 class ,这意味着您也可以解析 Void 如果您解析 Void,您可以'不解析非 Void 数据类型,为了清楚起见,假设您的Mono<Void>
class 如下所示:
public class Mono<T> {
private boolean status;
private String message;
private T data;
//....getter or setter ....
}
因此,就像您在上面尝试使用它一样: Mono<Void>
这意味着您只能执行以下操作:
return Mono<>(true, "Success", /*You can only parse null here*/)
If you want to parse Object rather than null there then you will have to change Mono<Void>
to Mono<Object>
note "Object" is the Class name of the new Object you want it to return in your case ProducerRecord Mono<ProducerRecord>
. 如果假设您根本不想将任何内容解析为第三个参数,那么您可以重载构造函数并消除第三个参数。
现在面对主要问题,这个概念也适用于ProducerRecord<String, Price>
: ProducerRecord<String, Price>
是否有满足上述实现的构造函数? new ProducerRecord<>(TOPIC, idPrix.toString(), data)
; 构造函数应如下所示:
public ProducerRecord(Topic topic, String idPrix, Price data){ /*Note Topic might be String in your case just make sure you're parsing the right data-type, and data you're parsing must be of type Price.*/
}
我真诚地希望我能很好地沟通,请随时问我任何问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.