【问题标题】:Java Generics: set List of superclass using List of subclassJava 泛型:使用子类列表设置超类列表
【发布时间】:2011-01-31 10:50:33
【问题描述】:

如果我在MyClass 有方法比如

setSuperClassList(List<Superclass>)

...我能做到吗:

new MyClass().setSuperClassList(new ArrayList<Subclass>())

这似乎无法编译。为什么?

【问题讨论】:

    标签: java generics class hierarchy


    【解决方案1】:

    试试setSuperClassList(List&lt;? extends Superclass&gt;)

    同时检查PECS,看看你应该使用? extends还是? super

    【讨论】:

      【解决方案2】:

      你只是在做泛型有点错误。添加? extends 位,这将允许传入的列表包含超类或其任何子类。

      setSuperClassList(List<? extends Superclass>)
      

      这称为设置泛型的上限。

      声明List&lt;Superclass&gt; 表示列表只能包含SuperClass。这不包括任何子类。

      【讨论】:

        【解决方案3】:

        由于java.util.List 不是covariant,因此无法编译。

        改用setSuperClassList(List&lt;? extends Superclass&gt;)

        【讨论】:

          【解决方案4】:

          做:

          setSuperClassList(List<? extends Superclass> list)
          

          这将允许列出超类的任何子类。

          【讨论】:

            猜你喜欢
            • 2011-09-09
            • 1970-01-01
            • 2015-12-12
            • 2023-03-06
            • 2010-12-02
            • 2017-03-08
            • 2015-04-23
            • 1970-01-01
            • 2019-11-18
            相关资源
            最近更新 更多