1

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

public class Box<T> {...}

我还创建了一个包含这些框的表,它具有用于该表上许多不同操作的吸气剂(选择等)。声明如下所示:

public class BoxContainer<T> {...}. 如果我写new BoxContainer<Animal>()get selected 方法 return Animal. 这是显而易见的。但是是否有可能确保 BoxContainer 只接受 type 的类型参数Box<T>?我试着写public class BoxContainer<Box<T>> {...},但由于某种原因这是不允许的。这可能吗?还是有更好的方法?

4

3 回答 3

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
  }
}
于 2013-07-10T12:29:06.680 回答
1

使用第二个类型的参数

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

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

public class BoxContainer<T> {
      List<Box<T>> innerList;
}
于 2013-07-10T12:27:25.830 回答
0

是类型的泛型。它只是指定可以使用任何类型的对象,但不能使用原语。这就是为什么Animal当你使用动物时它会返回

于 2013-07-10T12:29:00.197 回答