Така че имам нещо като следното:
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