gpt4 book ai didi

java - Java 中 F 界多态性的返回类型

转载 作者:行者123 更新时间:2023-12-02 10:06:37 25 4
gpt4 key购买 nike

我有一个界面:

public interface Message<T extends Message<T>> {
}

我有一个类将该方法实现为

public class FulfilmentReleasedDomModel implements Message<FulfilmentReleasedDomModel> {}

我有这个方法:

private <T extends Message<T>> Mono<T> getDomainModel(ConsumerRecord<String, String> record) {}

当我尝试返回 Mono<FulfilmentReleaseDomModel> 类型的对象时从这个方法中,编译器会抛出一个错误并要求我将其转换为 ( Mono<T> )。

我的问题是,因为我已经限制了 Textends Message ,和FulfilmentReleasedDomModel实现Message<FulfilmentReleasedDomModel> ,为什么我需要将其转换为 Mono<T>

最佳答案

关于泛型的一个常见误解是被调用者决定泛型类型是什么。不,调用者确实如此。

作为该方法的编写者,您无法决定什么 T是。通过返回Mono<FulfilmentReleasedDomModel> ,你是说T必须是FulfilmentReleasedDomModel 。但实际上,你的方法的调用者将决定什么 T是。他们可以声明一个名为 Foo 的类型。实现Message<Foo>并说TFoo 。您需要返回 Mono<Foo>相反。

看来你的方法不应该是通用的,因为被调用者正在决定使用什么类型:

private Mono<FulfilmentReleasedDomModel> getDomainModel(ConsumerRecord<String, String> record) {}

或者,如果您想让此方法更加灵活,以便您可以更改其实现以返回其他内容而不更改其返回类型,则可以使用通用通配符:

private Mono<? extends Message> getDomainModel(ConsumerRecord<String, String> record) {}

关于java - Java 中 F 界多态性的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55294100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com