代码之家  ›  专栏  ›  技术社区  ›  Rexam

如何管理扩展另一个类型的集合?

  •  1
  • Rexam  · 技术社区  · 8 年前


    我有以下情况:

    public class A {...};
    public class B extends A {...};
    

    我定义了一个函数 class C 标题如下:

    private void handleABC(final Collection<A>) {...}
    

    但当我试图将其称为传递类型时,会收到以下消息 B 以下内容:

    C类型中的handleABC(collection)方法不适用于参数(collection)。

    这对双方都有用吗 A 和 乙 因为我定义了方法 Collection<A> 和 乙 延伸自 一个 是吗?我做错什么了?

    4 回复  |  直到 8 年前
        1
  •  3
  •   Robert    8 年前

    B extends A ,是的,但是 Collection<B> extends Collection<A> 不是这样的。

    正如有人在评论中提到的,试着 Collection<? extends A> 是的。

        2
  •  2
  •   Mihir    8 年前

    更改 handleABC() 签名

    private void handleABC (final Collection<? extends A> )
    

    以便方法接受a的子类集合。

        3
  •  0
  •   Ashu    8 年前

    请检查此答案: https://stackoverflow.com/a/897973/3465242

    <T extends SomeClass>
    

    当实际参数可以是某个类或其任何子类型时。

    对你来说

    private void handleABC (final Collection<? extends A> )
    
        4
  •  0
  •   Cuong Bui    8 年前

    必须通过diamond运算符中指定的类,而不是具体的类,否则可以使用“?延伸a“。您可以阅读此链接: https://docs.oracle.com/javase/tutorial/java/generics/inheritance.html