Java集合 - 对元素的多态访问 [英] Java collections -- polymorphic access to elements
问题描述
我有 ThisType 的 LinkedHashSet 值。
ThisType 正在实现 ThatType 界面。
我需要这个集合的多态使用 - 能够指向 LinkedHashSet< ThatType>。
这是怎么做的?
我知道这是一个天真的问题,但我尝试的几件事情没有工作,我想做正确的方式。
提前感谢。
// ==========================
UPDATE:更多详情:
在下面的代码中, ThisType - 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< ThatType> 。我正在从 LinkedHashMap 到 LinkedHashSet 的转换。然而,对地图或集合中的集合值的多态引用没有任何作用。目前为止,所有这些操作中使用的所有且唯一的类型是 ThisType 。
我认为你想要的是以使用通配符。
LinkedHashSet< ;? extends ThatType> someFunction(LinkedHashSet< ;? extends ThatType> set){
return set;
}
如其他地方所述 虽然您可能需要考虑使用: I have a LinkedHashSet of values of ThisType.
ThisType is implementing the interface ThatType. I need the polymorphic use of this collection-- be able to point to it as LinkedHashSet< ThatType >. How is this done? i know this is a naive question, but several things i tried didn't work, and i wanna do it the right way. Thanks in advance. //============================== UPDATE: more details: In the following code, ThisType implements ThatType-- ThatType is an interface. In the end, i wanna return the theMap as a collection of ThatType **, not **ThisType. this is where the chain is broken. using the commented line (first line) for declaration is giving type mismatch error on put() & get() methods of the hash. not sure whether this is significant-- but,
i'm returning the result as LinkedHashSet< ThatType >. i'm doing the conversion from LinkedHashMap to LinkedHashSet. However, nothing worked nowhere for the polymorphic reference to collection values in the map or set. All and only type i used in all these operations so far is ThisType. ThatType gave me some error just about anywhere i tried it. I think what you want is to use wildcards. As has been explained elsewhere The wildcard in Though you may want to consider using this:
这篇关于Java集合 - 对元素的多态访问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋! LinkedHashSet< ThisType> / code>不是
LinkedHashSet< ThatType>
的子类,因为 LinkedHashSet< ThisType>
接受对象。
LinkedHashSet中的通配符<扩展ThatType>
意味着 ThatType
的一些类(不确定是什么)的 LinkedHastSet
;? extends ThatType> someFunction(Set< ;? extends ThatType> set){
return set;
}
//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);
}
LinkedHashSet<? extends ThatType> someFunction(LinkedHashSet<? extends ThatType> set) {
return set;
}
LinkedHashSet<ThisType>
is not a subclass of LinkedHashSet<ThatType>
, since LinkedHashSet<ThisType>
can't accept ThatType
objects.LinkedHashSet<? extends ThatType>
means a LinkedHastSet
of some class (not sure what) that extends ThatType
. Set<? extends ThatType> someFunction(Set<? extends ThatType> set) {
return set;
}