Java通用类绑定到扩展T <e>的类型

时间:2018-11-05 18:04:34

标签: java generics interface

我有一个通用测试类,该类在它要测试的集合(在我的情况下是堆栈)的类型上是通用的。

让通用类型的名称为S(对于Stack)。我有一个接口IStack<E>,我想要求S来实现IStack<E>。 当我宣布我的班级为 class Test<S extends IStack> { ... }, 我收到警告:

  

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

class Test<S<E> extends IStack<E>>导致语法错误

  

令牌'<'的语法错误,预期的

在Java中声明这种绑定的正确方法是什么?

2 个答案:

答案 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>>使所有人感到困惑