gpt4 book ai didi

java - 将带有通配符泛型的集合转移到 Java 中的列表

转载 作者:行者123 更新时间:2023-12-03 18:37:06 25 4
gpt4 key购买 nike

我有一个包含集合的数据类型和一个需要 List<? extends MyClass> 的方法.数据类型有Set<? extends MyClass> .我需要能够将内容移出集合并移入列表。它进入列表的顺序并不重要,它只需要开始跟踪它以便在显示时可以重新排序。可以说,将数据类型中的 Set 更改为 List 在这里是不可能的。

乍一看这似乎很容易。创建一个采用 Set 而不是 List 的新方法,将其更改为列表,然后将其传递给刚刚采用列表的旧方法。问题在于将集合更改为列表。

public void setData(Set<? extends MyClass> data) {
List<? extends Myclass> newData = ArrayList< /* What goes here? */ >();
for(ConcordaEntityBean o : data) {
newData.add(o);
}
setData(newData);
}

显然,我无法用通配符实例化一个 ArrayList,它很卡。我当时不知道类型。有什么方法可以从数据中提取类型并将其传递给 ArrayList?我可以用 MyClass 实例化它吗? ?还有其他方法吗?

最佳答案

你不能用 MyClass 实例化它因为newData不一定是 List<MyClass> 类型, 并且 Java 不支持协变(即 S 扩展 T 并不意味着 ArrayList<S>ArrayList<T> 的子类型)。

你可以做的是:

List<MyClass> newData = new ArrayList<MyClass>();

现在,Set 中的所有内容(保证是 MyClass 的子类型)可以放入 newData .

一般来说,通配符类型强制执行边界约束。你知道 Set<? extends MyClass>Set某种类型参数化,并且该类型从上方以MyClass为界.因此,当您处理来自 Set 的元素时, 你只能将它们视为 MyClass对象。

关于java - 将带有通配符泛型的集合转移到 Java 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2648438/

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