Код: Выделить всё
public class OuterStaticNestedDemo {
class Outer {
static class StaticNested {}
}
void qualifiedNew(Outer outer) {
new Outer.StaticNested();
new OuterStaticNestedDemo.Outer.StaticNested();
}
}
Код: Выделить всё
javac -g -source 25 -target 25 OuterStaticNestedDemo.java
OuterStaticNestedDemo.java:8: error: cannot select a static class from a parameterized type
new Outer.StaticNested();
^
1 error
Код: Выделить всё
java -jar ecj-3.44.0.jar -g -source 25 -target 25 OuterStaticNestedDemo.java
ecj кажется более мягким, чем javac, или это может быть ошибка в любом из двух компиляторов?
Этот вопрос отличается от вопроса: Статический метод в универсальном классе?. Они включают в себя разные части спецификации языка Java: старый вопрос касается запрещенных нестатических ссылок в статическом контексте (что похоже на использование this в статическом методе), а мой вопрос касается выбора статического класса из параметризованного типа в Java. Кроме того, старый вопрос касается ссылки на параметр типа из статического метода. В моем вопросе нет ссылки на параметр типа и статический метод. Ответы на старый вопрос не касаются того, действителен ли конкретный шаблон в моем вопросе или нет. И, наконец, пример кода в старом вопросе не компилируется с ecj, а мой пример — да.
Подробнее здесь: https://stackoverflow.com/questions/798 ... pe-in-java
Мобильная версия