Из учебного руководства по Java:
Наконец, существует также специальный вид литерала, названного литералом класса, сформированным путем взятия имени типа и добавления"
.class
"; например,String.class
. Это относится к объекту (типаClass
) это представляет сам тип.
К какой переменной этот литерал может быть присвоен?
Дайте небольшой пример, если это возможно.
Class<String> c = String.class;
Проверьте Javadoc для java.lang.class
, чтобы увидеть, что вы можете сделать с одним из этих маленьких ребят - в основном связанные с отражением
Вы можете добавить
[Obsolete]
на метод. Свойство ISERROR
устарелоэтайтетрибут
контролирует, генерируется ли ошибка или предупреждение, и вы можете также предоставить пояснительное сообщение.
Согласно jls
15.8.2 Классические литералы
Классический литерал - это выражение, состоящее из названия класса, интерфейса, массива или примитивного типа. на
.
и токенкласс
. Тип литерала класса составляеткласс
. Он оценивает объект класса для именованного типа (или дляvoid
), как определено определяющим классовым погрузчиком класса текущего экземпляра.
В примерах это такое же:
Class myClass = MyClass.class
или
MyClass.class.getResourceAsStream("config.properties");
Необходимо добавить подключаемый модуль в запись зависимости MANIFEST.MF
Необходимо также убедиться, что пакет, вызываемый класс leging, добавлен на вкладке «Runtime» файла MANIFEST EST EST.
EDIT:
Файл MANIFEST находится в каталоге/META-INF
-121--4998344-Вы ввели это значение? Тогда путь построения неверен. Если не уверен, что происходит.
-121--4998341-Чтобы понять это, необходимо понимать, что Последовательность является экземпляром (объектом) класса Class . Литерал последовательности (например, «I am a последовательность».) - это нотация, представляющая экземпляр (объект) класса Последовательностей , тогда как литерал класса (например, Hashtable.class) является нотацией, представляющей экземпляр класса Class .
Благодаря другим хорошим ответам здесь, вы знаете, что это такое, но вот типичный пример использования, который также может прояснить:
private static Logger log = Logger.getLogger(YourClassHere.class);
Как подсказывает код, это строка, где мы инициализируем фреймворк протоколирования (в этом примере я использую пакет org.apache.log4j
, но этот принцип распространяется и на другие фреймворки). Метод getLogger()
требует буквального класса, чтобы он знал, что такое протоколирование (т.е. текущий класс объекта).
Литерал сама - это MyClass
. Если вы пишете myclass.class
, вы получаете ссылку на объект класса. Если вы пишете новый MyClass ()
, он использует литерал, чтобы получить экземпляр объекта класса, который вы получаете по MyClass.Class
. Из экземпляра вы получаете тот же объект класса, вызывая MyClassInstance.getClass ()
.
Я уверен, что я не на 100%, но сам литерал не может быть назначен любой переменной. То, что вы можете сделать, это получить имя класса как строку и использовать структуру отражения для создания экземпляра.
В литералах классов можно найти некоторые общие способы использования в качестве токенов типа среды выполнения .