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

How to manage a collection for a type which extends another?


我有以下情况:

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

然后我在 class C 中定义了一个函数 header:

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

但是当我尝试调用它传递类型 B:

时收到以下消息

The method handleABC(Collection) in the type C is not applicable for the arguments (Collection).

自从我定义了方法 Collection<A>B extends from A 以来,这不应该对 AB 都有效吗?我做错了什么?

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

正如评论中提到的那样,尝试 Collection<? extends A>

handleABC()签名更改为

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

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

您必须传递钻石运算符中指定的 class,而不是具体的 classes 或者您可以使用“? extends A”。你可以阅读这个link:https://docs.oracle.com/javase/tutorial/java/generics/inheritance.html

请查看此答案:

<T extends SomeClass>

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

你的情况

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