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

时间:2018-06-27 09:00:40

标签: java collections extends


我有以下情况:

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

然后我在class C内部定义了一个带有以下标头的函数:

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

但是当我尝试通过类型B来调用它时,我收到以下消息:

  

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

由于我定义了方法ABCollection<A>扩展而来的BA都不能使用吗?我在做什么错了?

4 个答案:

答案 0 :(得分:3)

B extends A是的,但Collection<B> extends Collection<A>并非如此。

如某人在评论中所述,请尝试Collection<? extends A>

答案 1 :(得分:2)

handleABC()签名更改为

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

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

答案 2 :(得分:0)

您必须传递在菱形运算符中指定的类,而不是具体的类,否则您可以使用“?扩展A”。您可以阅读以下链接:https://docs.oracle.com/javase/tutorial/java/generics/inheritance.html

答案 3 :(得分:0)

请查看以下答案:https://stackoverflow.com/a/897973/3465242

<T extends SomeClass>

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

以您的情况

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