从Generic Supertype扩展?

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

public abstract class MyClass extends T { 

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

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

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

您可以从具有generics类型参数的超类型inheritance。 例如:

 public class MyList extends AbstractList 

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

 public class MyStringList extends AbstractList 

无法定义具有通配符超类型的类。 这样的概念在Java中没有任何意义(我不相信它在摘要中有很多价值)。 在您的MonitoredDevice示例中,我甚至不确定您期望的function。

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

我怀疑使用动态代理可以更好地实现您尝试做的事情。

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

从该错误消息中听起来你正试图从类型参数本身扩展,这是你不能做的,因为在运行时擦除了类型。 如果这不是您想要做的,请发布您的代码。