我有一个ThisType值的LinkedHashSet。
ThisType正在实现ThatThat接口。
我需要此集合的多态用法-能够将其指向LinkedHashSet 。
怎么做?
我知道这是一个幼稚的问题,但是我尝试过的几件事没有用,我想以正确的方式来做。
提前致谢。
// =============================
更新:更多详细信息:
在以下代码中,ThisType实现ThatType - ThatType是一个接口。
//LinkedHashMap<Integer, ? extends ThatType> theMap = new LinkedHashMap<>();
LinkedHashMap<Integer, ThisType> theMap = new LinkedHashMap<>();
for (Integer key:intArray) {
ThisType a = new ThisType();
if (theMap.containsKey(key)) {
a = theMap.get(key);
a.doStuff();
} else {
a.doOtherStuff();
}
theMap.put(key, a);
}
最后,我想返回theMap作为ThatType **,而不是** ThisType的集合。
这是链断裂的地方。使用注释行(第一行)进行声明会在哈希的put()和get()方法上产生类型不匹配错误。
不知道这是否有意义-但是,
我将结果作为LinkedHashSet 返回。我正在执行从LinkedHashMap到LinkedHashSet的转换。但是,对于映射或集合中的集合值的多态引用没有任何作用。到目前为止,我在所有这些操作中使用的所有且唯一的类型是ThisType。 ThatType在我尝试过的任何地方给了我一些错误。
最佳答案
我认为您要使用通配符。
LinkedHashSet<? extends ThatType> someFunction(LinkedHashSet<? extends ThatType> set) {
return set;
}
正如其他地方所解释的,
LinkedHashSet<ThisType>
不是LinkedHashSet<ThatType>
的子类,因为LinkedHashSet<ThisType>
不能接受ThatType
对象。LinkedHashSet<? extends ThatType>
中的通配符表示扩展LinkedHastSet
的某个类(不确定什么)的ThatType
。虽然您可能要考虑使用此方法:
Set<? extends ThatType> someFunction(Set<? extends ThatType> set) {
return set;
}
关于java - Java集合-对元素的多态访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19946238/