gpt4 book ai didi

具有下界(超)类型的 Java 方法

转载 作者:行者123 更新时间:2023-11-30 07:03:27 26 4
gpt4 key购买 nike

例如,我有下一个类,带有有界类型参数:

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 不允许这样做,因为两个实例虽然具有相同的 super,但可能不属于同一类,从而避免运行时异常。既然您确定它们始终属于同一类,为什么不在 itemContainer 和 items 中使用相同的类型?

    ItemContainer<T> itemContainer = new ItemContainer<>();
List<T> items = new ArrayList<>();

关于具有下界(超)类型的 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40506583/

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