从泛型类型参数(类型变量)扩展的类?

Mar*_*mus 2 java generics abstract-class

是否可以使类从泛型类型扩展?

我想对不同的组件进行子类化,或者implementsextends所有子类添加统一的功能。

我想要实现的是:

class MyTable extends MyAbstractComponent<JTable> {...}
class MyPanel extends MyAbstractComponent<JPanel> {...}
Run Code Online (Sandbox Code Playgroud)


    MyAbstractComponent t = new MyTable();
    MyAbstractComponent p = new MyPanel();
    container.add(t);
    container.add(p);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我该如何表述MyAbstractComponent
我尝试了以下操作,但它给了我错误“找到类型:参数 C.预期:类”:

abstract class MyAbstractComponent<C extends Component> extends C {...}
Run Code Online (Sandbox Code Playgroud)

Men*_*ild 5

您已经从编译器得到了很好的答案,因此不可能让类扩展类型参数。类型参数不是类。相反,abstract class MyAbstractComponent<C extends Component> extends C {...}我会简单地省略泛型(这里不太有用)或写:

abstract class MyAbstractComponent<C extends Component> extends Component {...}
Run Code Online (Sandbox Code Playgroud)

关于覆盖的愿望的评论getSelectedRows()

这只能在 JTable 子类中实现,而不能在面板子类中实现。在这种情况下,我推荐另一种方法:

  1. 将 MyAbstractComponent 定义为接口。
  2. 重新定义您的子类。

    class MyTable extends JTable Implements MyAbstractComponent // 这里重写 getSelectedRows() class MyPanel extends JPanel Implements MyAbstractComponent

如果您的 MyAbstractComponent 中已经有一些方法实现,请考虑将此代码移动到由 MyTable 和 MyPanel 调用的帮助程序类中。由于历史原因,泛型在不使用此语言功能的环境(SWING)中并不是那么有用。

无论如何,如果您有兴趣了解有关泛型的更多信息,我推荐 Angelika Langers 教程和有关泛型的常见问题解答(只需谷歌)。