3

在 Java 教程http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html中,类文字被称为“文字类型”

最后,还有一种特殊的字面量,称为类字面量,由类型名称和附加“.class”组成;例如,String.class。这指的是表示类型本身的对象(Class 类型)。

但是在 Java 规范http://docs.oracle.com/javase/specs/jls/se7/html/中,类文字没有放在3.10 Literals类型下,而是放在15.8 下。主要表达

那为什么呢?

4

2 回答 2

6

Java中类文字的类型到底是什么?

擦除的类型是java.lang.Class

未擦除的类型Foo.classjava.lang.Class<Foo>.


它在 JLS 中作为主要表达的原因是技术性的:

  • 类文字不是单一文字。三个(或更多)不同的符号结合起来形成了这种“恒定的,字面上的东西”。

  • 他们决定将称为文字,因为该值是常量。

  • 从句法的角度来看,它必须与(其他)主要表达式进入语法的同一部分……以便语法在没有大量歧义/上下文敏感性的情况下描述语言。

所以它真的可以在 JLS 中的任何一个地方出现。但他们只能把它放在一个地方。由于 Literal 部分中的其他文字是单一的(即一个符号),因此将其放入 Primary Expression 部分是有意义的。

但最重要的是,他们为什么决定以这种方式组织 JLS 并不重要。类文字的含义不取决于它的指定位置。

于 2013-04-27T03:07:54.770 回答
-2

不要太从字面上理解这个名字。AFoo.class等价于Class.forName("pkg.Foo"),它比简单的文字(如1and )复杂得多"abc"

于 2013-04-27T03:17:00.293 回答