Почему статический доступ к классу должен быть ограничен именем класса
Почему я должен квалифицировать ссылку на 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внутри лямбда-выражения?