Java - 非泛型类扩展泛型类

dan*_*ymo 4 java generics inheritance class

我想知道如何(如果可能)创建一个类,即通用类的特定类型。

具体来说,我已经实现abstract class Stack<Type>了所有必要的方法,我希望有一段class StackInteger时间的实例StackInteger也是Stack<Integer>.

我看到我可以做这样的事情:

class StackInteger {
    Stack<Integer> s;

    public StackInteger(int size) {
        s = new Stack<Integer>(size);
    }

}
Run Code Online (Sandbox Code Playgroud)

然后实现所有要包含的Stack方法,s.method();但我想知道从Stack扩展时是否可以轻松完成。

rge*_*man 6

是的,在这种情况下,继承是比组合更好的解决方案,因为 aStackInteger是 a Stack

只需Integerextends子句中作为类型参数提供。

class StackInteger extends Stack<Integer>
Run Code Online (Sandbox Code Playgroud)

但是,如果您不提供除Stack已有功能之外的任何其他功能,那么该类就没用了,您不妨直接使用Stack<Integer>.

  • 此外,如果您确实需要使用 `Stack&lt;Integer&gt;`,那么更喜欢等效的 `Deque` 实现,因为它提供了一组更完整和一致的 LIFO 堆栈操作。 (2认同)
  • 那是因为您正在使用 `Stack` 类的 _raw_ 形式。类型擦除发生,“T”变成“Object”(上限)。相反,使用`Stack&lt;Integer&gt; st = new StackInteger(3);`。 (2认同)