Ste*_*ins 23 java generics inheritance design-patterns
在Java中,我是否可以从通用超类型扩展?根据这篇文章,看起来我应该能够:http://www.ibm.com/developerworks/java/library/j-djc05133.html.
public abstract class MyClass<T> extends T {
Run Code Online (Sandbox Code Playgroud)
但是,当我在我的应用程序中执行类似操作时,我收到以下错误:"无法将类型参数T称为超类型."
有谁知道我是否能够从Java中的通用超类型扩展?而且,如果是这样,是否需要一些特殊的东西来实现这一目标?
编辑:我读错了文章.它实际上正在讨论这个潜在的问题.
And*_*yle 11
你是能够从具有泛型类型参数的超类型继承.例如:
public class MyList<T> extends AbstractList<T>
Run Code Online (Sandbox Code Playgroud)
(甚至给出参数界限,例如):
public class MyStringList extends AbstractList<String>
Run Code Online (Sandbox Code Playgroud)
您无法定义具有通配符超类型的类.这样的概念在Java中没有任何意义(我不相信它在摘要中有很多价值).在您的MonitoredDevice示例中,我甚至不确定您期望的功能.
由于擦除,这在Java工作方式的基础上是不可能的.每个类都必须有一个超类 - 什么是超类MonitoredDevice?MonitoredDevice对象有哪些方法可用?您将无法在此类上调用任何继承的方法,因为编译器无法保证此类方法存在,字节码也不能表示此类调用.
我怀疑使用动态代理可以更好地实现您尝试做的事情.
编辑:好的,在完全阅读文章后,我可以看到这样一个声明背后的动机是什么.但在完全阅读完文章之后,您也意识到目前Java不支持这一点.根本原因是由于擦除; 在当前的机制下,这种技术永远不可能实现,文章详细介绍了具体阻止这种技术发挥作用的细节.