【发布时间】:2012-12-28 06:40:24
【问题描述】:
我在使用泛型对现有设计进行重新设计/重构时遇到了困难。
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> 就好了,我可以继续更进一步,但我显然错了。
感谢您的帮助。
【问题讨论】:
-
尝试将结果声明更改为
Results<MySetDto extends SetDto<? extends DataDto>>- 不确定我的语法是否正确,但如果您说 SetDto那么它希望看到确切的通用签名。