将子对象和父对象的Arraylist传递给同一方法

时间:2018-08-23 12:00:27

标签: java inheritance multiple-inheritance

我有扩展了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
    }
}

2 个答案:

答案 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作为您的类型。您仅在创建列表时指定特定的实现类,但在任何其他地方,请避免使用实际的类名!