确保类型参数正确

时间:2013-07-10 12:16:21

标签: java java-ee generics

我创建了一个名为Box的类,它有一个类型参数。声明如下:

public class Box<T> {...}

我还创建了一个包含这些框的表,它在此表上有许多不同操作的getter(获得选择等)。声明如下:

public class BoxContainer<T> {...}。如果我写new BoxContainer<Animal>(),则获取选定的方法将返回Animal。这很明显。但是,是否可以确保BoxContainer只接受Box<T>类型的类型参数?我试着写public class BoxContainer<Box<T>> {...}但是由于某种原因这是不允许的。这可能吗?或者是更好的方法?

3 个答案:

答案 0 :(得分:1)

使用第二个键入的参数

public class BoxContainer<T, Y extends Box<T>> {...}

或者只是在容器内使用Box:

public class BoxContainer<T> {
      List<Box<T>> innerList;
}

答案 1 :(得分:1)

BoxContainer<T>是正确的泛型类型。如果您只想接受Box<T>类的BoxContainer个对象,则可以简单地限制方法/构造函数的签名:

public class BoxContainer<T> {
  private final Box<T> box;

  public BoxContainer(Box<T> box) {
    this.box = box;
  }

  public Box<T> getBox() {
    return box;
  }

  public T getObjectFromBox() {
     return box.getObject(); // assumes getObject returns object of type T
  }
}

答案 2 :(得分:0)

是类型的通用。它只指定可以使用任何类型的Object但不使用基元。这就是为什么当你使用动物时它返回Animal

相关问题