我有一个通用测试类,该类在它要测试的集合(在我的情况下是堆栈)的类型上是通用的。
让通用类型的名称为S
(对于Stack)。我有一个接口IStack<E>
,我想要求S
来实现IStack<E>
。
当我宣布我的班级为
class Test<S extends IStack> { ... }
,
我收到警告:
IStack是原始类型,引用...应该参数化。
class Test<S<E> extends IStack<E>>
导致语法错误
令牌'<'的语法错误,预期的
在Java中声明这种绑定的正确方法是什么?
答案 0 :(得分:4)
我认为您需要两个通用参数,一个用于元素,另一个用于堆栈类型,即
class Test<E,S extends IStack<E>>
(或E extends SomeAncestorOfYourElements
(如果需要)
答案 1 :(得分:2)
class Test<S extends IStack>
使用IStack
中的raw type,没有IStack
中内容的编译时信息。
您可以做几件事,这完全取决于您的设计:
class Test<S extends IStack<?>>
以允许IStack
中的任何元素类型class Test<E, S extends IStack<E>>
将IStack
绑定到特定的E
元素类型class Test<S extends IStack<S>>
使所有人感到困惑