具有下界(超)类型的泛型Java方法
例如,我有下一个类,带有有界类型参数:
public class ItemContainer<T> {
void addItems(List<T> items);
}
以及在另一个具有参数的类中的用法:
public class ItemsGenerator<T> {
public void putItems() {
ItemContainer<? super T> itemContainer = getItemContainer();
List<? super T> items = getItems();
itemContainer.addItems(items); // compilation error!
}
}
据我所知,问题在于第一个(ItemContainer)泛型参数是否与第二个(List)相同尚不清楚。好的解决方案可能是为方法定义泛型下限类型:
public <S super T> void putItems() {
ItemContainer<S> itemContainer = getItemContainer();
List<S> items = getItems();
itemContainer.addItems(items); // ok
}
但是,令人惊讶的是(对我来说),没有这样的语法(
slightly unconvincing reason)
有没有办法解决这个问题?我确信(在我的例子中)第一个和第二个参数是相同的,但我不知道如何向Java解释它
# 1 楼答案
您是对的,Java不允许这样做,因为两个实例虽然有相同的super,但可能不属于同一个类,因此避免了运行时异常。既然您确定它们总是属于同一类,为什么不在itemContainer和items中使用相同的类型呢