Почему статический доступ к классу должен быть ограничен именем класса
Почему я должен квалифицировать ссылку на class
внутри класса, в котором она определена? Например:
public class Foo {
private static Logger log = LoggerFactory.getLogger(Foo.class);
}
Почему я не могу просто вызвать LoggerFactory.getLogger(class)
, поскольку я уже нахожусь в контексте класса Foo
?
1 ответ:
JLS определяет
15.8.2. Литералы Класса
Литерал класса-это выражение, состоящее из имени класса, интерфейса, массива, примитивного типа или псевдотипа void, за которым следует a '.- и жетонclass
.Это не сделает язык неоднозначным, чтобы разрешить
class
, где выражение, как ожидается, позволит синтаксис, который вы описываете, но это будет включать переопределение ключевого словаclass
, чтобы означать обаПредложенный вами синтаксис может позволить назвать класс анонимного класса, но
- своего рода декларация
- Ссылка на экземпляр типа
Class
.getClass()
будет иметь то же значение в анонимных классах.Избавление от двух маркеров (безусловного имени класса и
.
) не дает большого значения, и это может вызвать путаницу внутри внутреннего класса. Например, что такоеclass
внутри лямбда-выражения?