2014-02-11 131 views
0
class a{} 
class b extends a{} 
class c <? extends b> extends b{} 
public class d { 
     public static void main(String[] args) { 
     c<c> n = new c<c>(); 
     } 
} 

我正在阅读SCJP。我没有得到泛型类的概念class<?>class<? extends anything> .....如果这意味着我们可以传递任何扩展“任何东西”的类,那么为什么上面的代码不工作?用泛型类声明java

请解释这一点,它非常混乱

问候

回答

2

这是没有意义的声明与一类参数类而没有提及该参数。因此,宣布这样的班级是不可预见的。你必须给类型参数一个名字。

变化

class c <? extends b> extends b{} 

class c <T extends b> extends b{} 

在类c你现在可以参考类型参数T,例如声明方法和变量。

2

您没有给出确切的错误消息,但我想这是关于您在定义类型参数时不能使用通配符的问题。

尝试:

class c <T extends b> extends b{} 

注:这是一个开始一个大写字母类名称的惯例,所以使用:

class C <T extends B> extends B{}