java - 从通用父类(super class)型扩展?

标签 java design-patterns generics inheritance

在 Java 中,我可以从泛型父类(super class)型扩展吗?根据这篇文章,看起来我应该能够:http://www.ibm.com/developerworks/java/library/j-djc05133.html .

public abstract class MyClass<T> extends T {

但是,当我在应用程序中执行类似操作时,我收到以下错误:“无法将类型参数 T 引用为父类(super class)型。”

有谁知道我是否能够从 Java 中的泛型父类(super class)型进行扩展?如果是这样,是否需要一些特殊的东西来实现这一点?

编辑:我读错了这篇文章。它实际上是在讨论这方面的潜在问题。

最佳答案

能够从具有泛型类型参数的父类(super class)型继承。例如:

public class MyList<T> extends AbstractList<T>

(甚至给出参数范围,例如):

public class MyStringList extends AbstractList<String>

无法定义具有通配符父类(super class)型的类。这样的概念在 Java 中没有任何意义(而且我不相信它在抽象中具有很大的值(value))。在您的 MonitoredDevice 示例中,我什至不确定您期望那里有什么功能。

由于删除,这在 Java 工作方式的基本层面上根本不可能。每个类都必须有一个父类(super class)——MonitoredDevice 的父类(super class)是什么? MonitoredDevice 对象有哪些方法可用?您将无法在此类上调用任何继承的方法,因为编译器无法保证此类方法存在,字节码也无法表示此类调用。

我怀疑 dynamic proxies 可以更好地实现您想要做的事情.

编辑:好的,在完整阅读这篇文章之后,我可以看到这样一个声明背后的动机是什么。但是读完这篇文章,你也意识到目前 Java 并不支持这个。根本原因是由于删除;在当前的机制下,这种技术永远不可能实现,本文详细介绍了具体阻止这种技术发挥作用的原因。

关于java - 从通用父类(super class)型扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2000478/

相关文章:

java - Eclipse Luna 请求 Java 1.8 但失败

java - 如何将鼠标位置(以像素为单位)转换为网格上的行和列?

java - 没有创建 hs_err_pid.log 文件,也没有从 Solaris 上的 jvm 转储核心

java - 微服务-不同层中变量的定义。设计最佳实践

Java 使用泛型进行模糊方法调用

Java和 "generic"接口(interface)

java - 如何修复无需凭据即可访问的 Java JMX RMI

c++ - 使用自由函数作为伪构造函数来利用模板参数推导

CSV文件的python Dictread,数据中包含NUL字节

Java:应用于 Map 泛型类型的多态性