gpt4 book ai didi

java - 无法从 Set> 扩展到 Set>

转载 作者:行者123 更新时间:2023-11-30 06:20:29 25 4
gpt4 key购买 nike

我正在尝试执行以下操作以避免以后出现未经检查的转换:

代码:

Set<Entry<String, ? extends SerializableForLayout>> set = 
layoutObjectList.entrySet();

错误:

Type mismatch: cannot convert from Set<Map.Entry<String,capture#2-of ? 
extends SerializableForLayout>>
to Set<Map.Entry<String,? extends SerializableForLayout>>

完整代码:

public void loadLayoutList(ArrayList<SerializableForLayout> preparedList,
ConcurrentHashMap<String, ? extends SerializableForLayout> layoutObjectList
)
{
SerializableForLayout t;
if (layoutObjectList == null)return;

Set<?> set = layoutObjectList.entrySet();
Iterator<?> itTags = set.iterator();
Entry<String, SerializableForLayout> entry;

while (itTags.hasNext()) {
entry = (Entry<String, SerializableForLayout>) itTags.next();
t = entry.getValue();
addForSerializableLayouts(t,preparedList);
}
Collections.sort(preparedList, ApplicationsSort.LayoutWeightComparator);
}

这个有效:

Set<?> set = layoutObjectList.entrySet();

但是有个警告:

强制取消在线上未经检查的转换:

entry = (Entry<String, SerializableForLayout>) itTags.next();

我如何在不需要抑制的情况下执行此操作?

最佳答案

问题是您正在使用多个 ?,而在 Java 中它们不能保证相同。将此方法设为泛型,以便您可以引用泛型类型参数,并且在整个方法中保持相同。

public <T extends SerializableForLayout>
void loadLayoutList(ArrayList<SerializableForLayout> preparedList,
ConcurrentHashMap<String, T> layoutObjectList)

然后您应该能够使用 T 正确定义您的 set 变量。

Set<Map.Entry<String, T>> set = layoutObjectList.entrySet();

关于java - 无法从 Set<Map.Entry<String,capture#2-of 转换?将 A>> 扩展到 Set<Map.Entry<String,?延伸 A>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21761667/

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