Итак, у меня есть что-то вроде следующего:
public class Enclosing<T extends Comparable<T>> {
// non-relevant code snipped
public class Inner {
private T value;
public Inner(T t) {
value = t;
}
}
}
Все компилируется и мир счастлив. Однако всякий раз, когда я пытаюсь создать экземпляр Enclosing.Inner
следующим образом, я не могу:
new Enclosing<Integer>.Inner(5);
Происходит следующая ошибка:
Не удается выделить тип элемента
Enclosing<Integer>.Inner
с помощью параметризованного составного имени; используйте его простое имя и объемлющий экземпляр типаEnclosing<Integer>
.
Важно отметить, что я не могу сделать внутренний класс static
, потому что он содержит поле типа T
.
Как я могу обойти это?
static
, потому что он содержит поле типаT
: Это больше похоже на причину сделать внутренний класс универсальным, используя те же границы, что и внешний класс, чем как причина сделать внутренний класс нестатическим. (Не говоря уже о том, что ваш внутренний класс должен быть статичным. Это зависит от вашего дизайна в целом, а не от этой отдельной детали.) - person ruakh   schedule 22.11.2011