我有一个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/

10-09 06:21