[英]Java generics question
所以我有3节课。
Abstract class A
Class B extends class A
independent Class C
在包含main方法的D类中,我创建了一个B类实例的列表
List<B> b = methodCall(); // the method returns a list of instances of class B
现在在类CI中有一个方法对A和B都是通用的,因此我不想复制它。 我想有一个方法,将A类的实例作为输入,如下所示:
public void someMethod(List<A> a)
但是,当我这样做时:
C c = new C();
c.someMethod(b);
我得到一个错误,some-method不适用于参数List<B>
,而是期望得到List<A>
。
有没有一种解决这个问题的好方法? 非常感谢!
如果你有一个期望List<A>
的方法,并且一个B extends A
类B extends A
,并且你希望将这个方法传递给List<B>
,那么你应该将该方法声明为:
public void someMethod(List<? extends A> list)
这允许传递给方法的列表是A的列表或任何扩展B的列表。
请注意,您将无法确定具体类型?
传递给方法。
此外,如果您在两个类之间有重复的方法,那可能表明您的设计出现了问题。
public void someMethod(List<? extends A> a){ //...
在方法签名中,您有List<A> a
,这意味着它只接受A
类对象的列表。 你需要的东西是接受A
的列表和A
any subtype of A
(或any subtype of A
一个子类型)。
你需要的是这个:
public void someMethod(List<? extends A> list) {
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.