代码之家  ›  专栏  ›  技术社区  ›  sammyukavi Aladin

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

  •  1
  • sammyukavi Aladin  · 技术社区  · 6 年前

    我有扩展类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 回复  |  直到 6 年前
        1
  •  4
  •   DodgyCodeException    6 年前

    使用带通配符的泛型表示您将接受任何 A 一个 .

    public void doStuff(List<? extends A> list) {
        ...
    }
    

    如果要捕获要写入的确切列表类型,请执行以下操作:

    public <T extends A> void doStuff(List<T> list) {
        ...
    }
    

    那你就可以用 T 方法内部。如果你不需要 T型 ,坚持第一种方法。

        2
  •  0
  •   GhostCat    6 年前

    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