【发布时间】:2016-11-09 12:03:33
【问题描述】:
例如,我有下一个类,有界类型参数:
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 解释它。
【问题讨论】:
标签: java generics methods parameters wildcard