我创建了一个名为Box
的类,它有一个类型参数。声明如下:
public class Box<T> {...}
我还创建了一个包含这些框的表,它在此表上有许多不同操作的getter(获得选择等)。声明如下:
public class BoxContainer<T> {...}
。如果我写new BoxContainer<Animal>()
,则获取选定的方法将返回Animal
。这很明显。但是,是否可以确保BoxContainer只接受Box<T>
类型的类型参数?我试着写public class BoxContainer<Box<T>> {...}
但是由于某种原因这是不允许的。这可能吗?或者是更好的方法?
答案 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