2013-04-27 5 views
3

в учебнике Java http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html, класс литералы упоминаются как «буквальный тип»Что такое тип литерала класса в Java?

Наконец, есть также специальный вид литерал называется классом буквальные, образованный, взяв имя типа и добавлению».class «; для пример, String.class. Это относится к объекту (типа Class), который представляет собой сам тип.

но в спецификации Java http://docs.oracle.com/javase/specs/jls/se7/html/, класс литералов не ставится под 3,10 литералов типа, но вместо этого ставится под 15.8. Первичные выражения

Так почему это?

ответ

6

Что такое тип литерала класса в Java?

Удаленный тип: java.lang.Class.

Неиспользованный тип Foo.class будет java.lang.Class<Foo>.


Причина это находится в JLS в качестве основного выражения является техническим:

  • Класса буквальный не является унитарным буквальным. Это три (или более) разных символа, которые объединяются, чтобы сформировать эту «постоянную, буквально вещь».

  • Они решили позвонить это буквально, потому что значение является константой.

  • С синтаксической точки зрения она должна перейти в ту же часть грамматики, что и другие первичные выражения ... для того, чтобы грамматика описала язык без массы неоднозначности/контекстной чувствительности.

Так что это действительно могло произойти в любом месте JLS. Но они должны положить это только в одном месте. И поскольку другие литералы в Литеральной секции являются унитарными (то есть одним символом), имеет смысл помещать их в раздел первичной выраженности.

Но суть в том, что на самом деле не имеет значения, почему они решили организовать JLS таким образом. Значение литерала класса не зависит от того, где оно указано.

-2

Не принимайте это имя буквально. A Foo.class эквивалентен Class.forName("pkg.Foo"), что намного сложнее, чем простые литералы, такие как 1 и "abc".

+0

Он спрашивает о языке, а не об API. В этом контексте ваше утверждение в основном ложно. – EJP

Смежные вопросы