Что класс является литеральным в Java?

Из учебного руководства по Java:

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

К какой переменной этот литерал может быть присвоен?

Дайте небольшой пример, если это возможно.

54
задан Joachim Sauer 10 January 2013 в 07:21
поделиться

7 ответов

Class<String> c = String.class;

Проверьте Javadoc для java.lang.class , чтобы увидеть, что вы можете сделать с одним из этих маленьких ребят - в основном связанные с отражением

48
ответ дан 7 November 2019 в 07:48
поделиться

Вы можете добавить

[Obsolete]

на метод. Свойство ISERROR устарелоэтайтетрибут контролирует, генерируется ли ошибка или предупреждение, и вы можете также предоставить пояснительное сообщение.

-121--3832460-

Согласно jls

15.8.2 Классические литералы

Классический литерал - это выражение, состоящее из названия класса, интерфейса, массива или примитивного типа. на . и токен класс . Тип литерала класса составляет класс . Он оценивает объект класса для именованного типа (или для void ), как определено определяющим классовым погрузчиком класса текущего экземпляра.

11
ответ дан 7 November 2019 в 07:48
поделиться

В примерах это такое же:

Class myClass = MyClass.class

или

MyClass.class.getResourceAsStream("config.properties");
2
ответ дан 7 November 2019 в 07:48
поделиться

Необходимо добавить подключаемый модуль в запись зависимости MANIFEST.MF

  • Open MANIFEST.MF
  • Got to tab Dependencies
  • Add the plugin your referenced class is placed

Необходимо также убедиться, что пакет, вызываемый класс leging, добавлен на вкладке «Runtime» файла MANIFEST EST EST.

EDIT:

Файл MANIFEST находится в каталоге/META-INF

-121--4998344-

Вы ввели это значение? Тогда путь построения неверен. Если не уверен, что происходит.

-121--4998341-

Чтобы понять это, необходимо понимать, что Последовательность является экземпляром (объектом) класса Class . Литерал последовательности (например, «I am a последовательность».) - это нотация, представляющая экземпляр (объект) класса Последовательностей , тогда как литерал класса (например, Hashtable.class) является нотацией, представляющей экземпляр класса Class .

37
ответ дан 7 November 2019 в 07:48
поделиться

Благодаря другим хорошим ответам здесь, вы знаете, что это такое, но вот типичный пример использования, который также может прояснить:

    private static Logger log = Logger.getLogger(YourClassHere.class);

Как подсказывает код, это строка, где мы инициализируем фреймворк протоколирования (в этом примере я использую пакет org.apache.log4j, но этот принцип распространяется и на другие фреймворки). Метод getLogger() требует буквального класса, чтобы он знал, что такое протоколирование (т.е. текущий класс объекта).

22
ответ дан 7 November 2019 в 07:48
поделиться

Литерал сама - это MyClass . Если вы пишете myclass.class , вы получаете ссылку на объект класса. Если вы пишете новый MyClass () , он использует литерал, чтобы получить экземпляр объекта класса, который вы получаете по MyClass.Class . Из экземпляра вы получаете тот же объект класса, вызывая MyClassInstance.getClass () .

Я уверен, что я не на 100%, но сам литерал не может быть назначен любой переменной. То, что вы можете сделать, это получить имя класса как строку и использовать структуру отражения для создания экземпляра.

4
ответ дан 7 November 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: