为什么必须使用类名限定对类的静态访问

时间:2014-04-07 15:24:42

标签: java specifications

为什么我必须在其定义的类中限定对class的引用?例如:

public class Foo {
    private static Logger log = LoggerFactory.getLogger(Foo.class);
}

为什么我不能只调用LoggerFactory.getLogger(class)因为我已经在Foo类的上下文中?

1 个答案:

答案 0 :(得分:4)

JLS定义

  

15.8.2。类文字

     

类文字是一个表达式,由类,接口,数组或基本类型的名称或伪类型void组成,后跟一个'。'和令牌class

它不会使语言含糊不清以允许class表达式允许您描述的语法,但它会涉及重写关键字class以表示两者

  1. 一种宣言
  2. Class类型实例的引用。
  3. 您建议的语法可能允许命名匿名类的类,但getClass()在匿名类中具有相同的含义。

    摆脱两个标记(非限定类名和.)并没有提供太多价值,它可能会导致内部类混淆。例如,lambda表达式中的class是什么?