【问题标题】:Java extend generically specified typeJava 扩展通用指定类型
【发布时间】:2011-05-25 04:13:33
【问题描述】:

有没有我可以做这样的事情:

Class extends <T extends ClassB>

你可以让一个类扩展一个类,只要该类扩展了通用指定的类必须扩展的类吗?

它的语法/结构是什么?

【问题讨论】:

  • 只是好奇:您真正想要完成什么?如果确实存在这种功能,您能否描述一下您将如何使用或用于什么用途?
  • 我正在尝试构建一点 MVC 类结构,并且我希望 View 基类继承 Container 方法和属性。但在扩展类中,我希望该类由 JFrame 扩展。

标签: java generics


【解决方案1】:

不,这是不可能的。我认为这也没有多大意义——当你使用泛型并以这种方式指定一个类时,你只拥有你指定的类的信息。

对于正常使用(例如容器),这是有道理的,因为它允许您依赖特定类或接口的方法,同时能够确保额外的类型安全。然而,对于扩展一个类,这并没有多大意义——因为你只能依赖ClassB的方法,它在功能上与只做Class extend ClassB是相同的。

为了使您的想法更有意义,您需要能够采用您定义的类并传递一个类型以“扩展”。然而,这将有许多与多重继承相同的陷阱——如果在 Class 中首先定义的方法也在您传递给泛型的类中定义,但在 ClassB 中没有定义,您会怎么做?在 Java 中没有多重继承是一个设计决策,而拥有像这样工作的泛型会违背这一点。

简而言之,这样的事情要么类似于多重继承,要么与普通继承相同。

【讨论】:

  • 其实ClassB是一个Container,我希望能够访问基类上的Container方法,访问子类中的子类型方法。
【解决方案2】:

我认为由于类型擦除,您将无法执行此操作。例如,你甚至不能这样做:

class A<T> {
    class B extends T {
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多