在 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/