Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确保类型参数正确_Java_Jakarta Ee_Generics - Fatal编程技术网

Java 确保类型参数正确

Java 确保类型参数正确,java,jakarta-ee,generics,Java,Jakarta Ee,Generics,我创建了一个名为Box的类,它有一个类型参数。声明如下: 公共类框{…} 我还创建了一个包含这些框的表,该表中有许多不同操作的getter(getselected等)。声明如下: 公共类BoxContainer{…}。如果我写newboxcontainer()get selected方法返回Animal。这是显而易见的。但是是否可以确保BoxContainer只接受类型为Box的类型参数?我试图编写公共类BoxContainer{…},但由于某些原因,这是不允许的。这可能吗?还是更好的方法?使用

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

公共类框{…}

我还创建了一个包含这些框的表,该表中有许多不同操作的getter(getselected等)。声明如下:


公共类BoxContainer{…}
。如果我写
newboxcontainer()
get selected方法返回
Animal
。这是显而易见的。但是是否可以确保BoxContainer只接受类型为
Box
的类型参数?我试图编写
公共类BoxContainer{…}
,但由于某些原因,这是不允许的。这可能吗?还是更好的方法?

使用第二个键入的参数

public class BoxContainer<T, Y extends Box<T>> {...}
公共类BoxContainer{…}
或者只使用容器内的盒子:

public class BoxContainer<T> {
      List<Box<T>> innerList;
}
公共类BoxContainer{
列表内部列表;
}

是类型的泛型。它只是指定可以使用任何类型的对象,但不能使用基本体。这就是为什么当您使用Animal时,它返回
Animal
BoxContainer
是正确的泛型类型。如果您只想为
BoxContainer
类接受
Box
对象,您可以简单地限制方法/构造函数的签名:

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
  }
}
公共类BoxContainer{
私人总装箱;
公共箱式集装箱(箱){
this.box=box;
}
公共框getBox(){
返回框;
}
公共T getObjectFromBox(){
return box.getObject();//假定getObject返回类型为T的对象
}
}

我真的不知道
Box
BoxContainer
之间的关系,你能提供完整的代码片段吗?BoxContainer的
t
类型必须与
Box
t
类型相同吗?对不起,我写这篇文章时对这个问题感到困惑。我道歉。