我有以下接口和实现:
public interface Box<T> extends Serializable {
String getLabel();
T getContent();
}
public class BananaBox implements Box<Banana> {
private String label;
private Banana content;
public String getLabel() {
return label;
}
public Banana getContent() {
return content;
}
}
然后我在一个方法中使用这些类:
public void openAllBoxes(Set<Box> boxes) {
}
public class do() {
this.openAllBoxes(mySet)
}
我的IDE intelliJ突出显示了Set<Box>
,因为它使用了参数化类'Box',所以我将其设置为泛型:
public <T extends Box<T>> void openAllBoxes(Set<T> boxes) {
}
但是现在我的方法openAllBoxes(mySet)
是无效的,因为它需要一个Set<T>
而不是Set<Box>
。确切的错误是reason: no instance(s) of type variable(s) T exist so that Banana conforms to Box<T>
,我不明白应该做什么和为什么。
谢谢!
2条答案
按热度按时间tcomlyy61#
感谢您的回答,我实际上混淆了两个泛型参数,正确的方法定义是
jaxagkaj2#
如果您确实不太关心Box的元素类型,无法将其全部打开,则可以避免原始类型警告,并为该元素类型指定一个带有签名的名称
这个签名至少和操作员的回答一样通用。