从通用超类型扩展?

在Java中,我是否能够从泛型超类型进行扩展?根据这篇文章,看起来我应该能够:http://www.ibm.com/developerworks/java/library/j-djc05133.html

public abstract class MyClass<T> extends T {

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

有谁知道我是否能够从Java中的通用超类型扩展?如果是这样,是否需要一些特殊的东西来实现这一目标?

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


答案 1

您可以从具有泛型类型参数的超类型继承。例如:

public class MyList<T> extends AbstractList<T>

(甚至给出参数边界,例如):

public class MyStringList extends AbstractList<String>

您无法定义具有通配符超类型的类。这样的概念在Java中没有任何意义(我不相信它在抽象中有多大价值)。在你的例子中,我甚至不确定你期望在那里有什么功能。MonitoredDevice

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

我怀疑你试图做的事情可以通过动态代理更好地实现。

编辑:好吧,在完全阅读了文章之后,我可以看到这种声明背后的动机是什么。但是在完整阅读了本文之后,您也意识到Java目前不支持此功能。根本原因是由于擦除;在当前的机制下,这种技术永远不可能实现,本文详细介绍了具体阻止其工作的原因。


答案 2

从该错误消息中可以看出,您似乎正在尝试从类型参数本身进行扩展,您无法执行此操作,因为该类型在运行时被擦除。如果这不是您要尝试执行的操作,请发布您的代码。


推荐