如何管理扩展另一个类型的 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
以来,这不应该对 A
和 B
都有效吗?我做错了什么?
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> )
我有以下情况:
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
以来,这不应该对 A
和 B
都有效吗?我做错了什么?
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> )