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



我想制作一个可以容纳两种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

这个问题说:don't use a wildcard when you both get and put.

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

通配符不适合此用例。你应该只是做

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

并从 get施放返回值:

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);

最新更新