我有扩展了A类的B类。如何在C类中编写一个方法,该方法可以接收包含B类或A类对象而不覆盖的ArrayList?
public class A {
//Some methods here
}
public class B extends A {
//Some methods here
}
public class C {
public Static void main(String[] args){
ArrayList<A> one = new ArrayList<>();
one.add(new A());
ArrayList<B> two = new ArrayList<>();
two.add(new B())
doStuff(one);
doStuff(two);
}
public void doStuff(args){
//go ahead do stuff
}
}
答案 0 :(得分:3)
使用具有通配符的泛型来表示您将接受所有 A
或扩展 A
的列表。
public void doStuff(List<? extends A> list) {
...
}
如果要捕获确切的列表类型,请输入:
public <T extends A> void doStuff(List<T> list) {
...
}
然后,您可以在方法内使用T
。如果您不需要T
,请坚持第一种方法。
答案 1 :(得分:0)
这应该有效:
public void doStuff(List<? extends A) someList)
...然后,这变为可能:
List<A> ones = new ArrayList<>();
one.add(new A());
List<B> two = new ArrayList<>();
two.add(new B())
doStuff(one);
doStuff(two);
这里还有一件重要的事情:使用List
作为您的类型。您仅在创建列表时指定特定的实现类,但在任何其他地方,请避免使用实际的类名!