如果不能使用通配符,如何列出几种对象?

How do I make a list of several kind of object if I cannot use wildcards?

我想做一个可以装两种ObjectList。我想到的是使用通配符。下面是我的代码。

public class Parent {
  //code  
}

public class ChildOne extends Parent {
  //code
}

public class ChildTwo extends Parent {
  //code
}

public class Implementation {

  List<? extends Parent> list;

  public Implementation() {

    list.add(new ChildOne());
    list.add(new ChildTwo());

    ChildOne co = list.get(0);
    ChildTwo ct = list.get(1);

  }

}

我不能使用 <? extends Parent>,因为我可以 add

但是,我也不能使用 <? super Parent>,因为我使用 get

This question 表示:don't use a wildcard when you both get and put.

那么,如何在不使用通配符的情况下列出几种对象?

通配符不适用于此用例。你应该简单地做

List<Parent> list = new ArrayList<>();

并从 get:

转换 return 值
ChildOne co = (ChildOne) list.get(0);
ChildTwo ct = (ChildTwo) list.get(1);

您可以这样创建列表:

List<Parent> list = new ArrayList<>();
list.add(new ChildOne());
list.add(new ChildTwo());

现在您可以添加和获取任何对象(或扩展)Parent

请记住,您需要在获取对象时将其转换为正确的对象。

ChildOne co = (ChildOne) list.get(0);
ChildTwo ct = (ChildTwo) list.get(1);