我试图做到以下几点,以避免未经检查的投以后:无法从Set <Map.Entry <String,capture#2-of?将A >>扩展为Set <Map.Entry <String ,?扩展A >>
代码:
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();
我如何这样做,而不需要压制?
如果你想编译时类型安全,你必须能够告诉它什么类型是在编译时。如果你直到运行时才知道,你会得到未经检查的警告,这就是警告的意思。许多“真实”的API充满了压制的束缚,这只是在java中处理运行时类型的现实。 – Affe
[Bounded-wildcard相关的编译器错误]的可能重复(http://stackoverflow.com/questions/18907262/bounded-wildcard-related-compiler-error) –