2014-02-11 3 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

Это не имеет никакого смысла, чтобы объявить класс с параметром типа никогда не обращаясь к этому параметру. Поэтому не предвидится объявить такой класс. Вы должны указать параметр type name.

Изменить

class c <? extends b> extends b{} 

в

class c <T extends b> extends b{} 

В классе c теперь вы можете сослаться на параметр типа T, например, для объявления методов и переменных.

2

Вы не указали точное сообщение об ошибке, но я думаю, что вы не можете использовать wild cards при определении параметров типа.

Try:

class c <T extends b> extends b{} 

Примечание: Это соглашение, чтобы начать имена классов с большой буквы, так используйте:

class C <T extends B> extends B{} 
Смежные вопросы