объявление класса с обобщенными java

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<?> и _3 _..... если это означает, что мы можем передать любой класс, который расширяет «что угодно», то почему приведенный выше код не работает?

Пожалуйста, объясните это, это очень сбивает с толку

С Уважением


person user2985842    schedule 11.02.2014    source источник


Ответы (2)


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

Изменять

class c <? extends b> extends b{}

to

class c <T extends b> extends b{}

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

person Holger    schedule 11.02.2014

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

Пытаться:

class c <T extends b> extends b{}

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

class C <T extends B> extends B{}
person Puce    schedule 11.02.2014