gpt4 book ai didi

java - 与 Java 泛型绑定(bind)不匹配 "nesting"

转载 作者:行者123 更新时间:2023-11-29 09:07:33 24 4
gpt4 key购买 nike

我在使用泛型对现有设计进行重新设计/重构时遇到困难。

public interface DataDto {
// some data here
}

public interface SetDto<MyDataDto extends DataDto> {
List<MyDataDto> getData();
}

public interface Results<MySetDto extends SetDto<DataDto>> {
MySetDto getResults();
}

public interface MyProblemInterface<MyDataDto extends DataDto,
MySetDto extends SetDto<MyDataDto>,
MyResults extends Results<MySetDto>> {
// some stuff here
}

我的问题是 MyProblemInterface 出现以下错误:

Bound mismatch: The type MySetDto is not a valid substitute for the
bounded parameter <MySetDto extends SetDto<DataDto>> of the type
Results<MySetDto>

我承认我在泛型方面的经验有些有限,但基本上我试图强制执行 MyProblemInterface 中的所有三种类型是相同的“类型”。例如,如果我有 ADataDto , BDataDto , ASetDto<ADataDto> , BSetDto<BDataDto> , AResults<ASetDto> , BResults<BSetDto> ,我想确保一个类不能以类似 AMyProblemInterface<ADataDto, ASetDto, BResults> 的方式实现 MyProblemInterface .我认为自MySetDto延伸SetDto<MyDataDto>很好,我可以继续更进一步,但我显然错了。

感谢您的帮助。

最佳答案

你对 Java 泛型的要求太多了。

如下声明接口(interface)会更简单:

public interface MyProblemInterface<MyDataDto extends DataDto>

然后强制方法使用SetDto<MyDataDto>Results<MySetDto> .

通过在类/接口(interface)声明中使用泛型,您可以指定某种种类,这些种类稍后在定义中确定。但在你的情况下,你说 SetDtoResults总会有MyDataDto作为参数,所以没有变化。

关于java - 与 Java 泛型绑定(bind)不匹配 "nesting",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061823/

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