所以我有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
现在在C类中,我有一个A和B共有的方法,因此我不想复制它。我想有一个方法将A类的实例作为输入,如下所示:
public void someMethod(List<A> a)
然而,当我这样做时:
C c = new C();
c.someMethod(b);
我得到一个错误,即某个方法不适用于参数List<B>
,而是期望获得List<A>
。
有解决此问题的好方法吗? 非常感谢!
答案 0 :(得分:8)
如果您的方法需要List<A>
和类B extends A
,并且您希望将此方法传递给List<B>
,那么您应该将该方法声明为:
public void someMethod(List<? extends A> list)
这允许传递给方法的列表是A的列表或任何扩展B的列表。
请注意,您将无法确定传入方法的?
的确切类型。
此外,如果您在两个类之间有重复的方法,那可能表明您的设计出现了问题。
答案 1 :(得分:3)
public void someMethod(List<? extends A> a){ //...
答案 2 :(得分:1)
在您的方法签名中,您有List<A> a
,这意味着它只接受A
类型的对象列表。您需要的是接受A
和any subtype of A
(或A的一个子类型)列表的内容。
你需要的是:
public void someMethod(List<? extends A> list) {
...
}