Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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
绑定到扩展T<;的类型的Java泛型类;E>;_Java_Generics_Interface - Fatal编程技术网

绑定到扩展T<;的类型的Java泛型类;E>;

绑定到扩展T<;的类型的Java泛型类;E>;,java,generics,interface,Java,Generics,Interface,我有一个泛型测试类,它在它测试的集合(在我的例子中是堆栈)的类型上是泛型的 让泛型类型的名称为S(对于堆栈)。我有一个接口IStack,我想要求S来实现IStack。 当我宣布我的班级为 类测试{…}, 我得到一个警告: IStack是原始类型,引用。。。应该参数化 类测试导致语法错误 标记“上的语法错误我认为您需要两个通用参数,一个用于元素,另一个用于堆栈类型,即 class Test<E,S extends IStack<E>> 类测试 (或者如果需要,E扩展元素

我有一个泛型测试类,它在它测试的集合(在我的例子中是堆栈)的类型上是泛型的

让泛型类型的名称为
S
(对于堆栈)。我有一个接口
IStack
,我想要求
S
来实现
IStack
。 当我宣布我的班级为
类测试{…}
, 我得到一个警告:

IStack是原始类型,引用。。。应该参数化

类测试
导致语法错误


标记“上的语法错误我认为您需要两个通用参数,一个用于元素,另一个用于堆栈类型,即

class Test<E,S extends IStack<E>>
类测试
(或者如果需要,
E扩展元素的某些存储)

类测试
使用
IStack
,没有
IStack
内部的编译时信息

您可以做的事情很少,完全取决于您的设计:


  • class Test
    class TestIf
    E
    已绑定,您需要
    class Test
    。如果
    E
    未绑定,则
    class test这听起来可能有些轻率,但我使用的测试框架会将其声明为
    class test
    ,没有类型参数。Java泛型没有按照大多数人期望的方式工作,也不可重新定义,因此,尝试以这种方式参数化类没有实际价值我得到错误“类型S不是泛型的;它不能用参数参数化”。有没有办法做到这一点“给我一些堆栈实现,不管它是什么显式堆栈,我都会测试它?”事情?@Anton你的C#背景很明显;)但在Java中,它的工作方式不同。您需要:1)将
    Supplier
    的实例传递给构造函数(例如
    SomeStack::new
    )并调用
    Supplier.get()
    ,或者:2)传递
    Class
    (例如
    SomeStack.Class
    )的实例并调用
    stackClass.newInstance()