Объект описания типа в Java
Значение типа Class описывает класс целиком. Его
можно получить тремя привычными способами: из имени типа
в коде, из уже созданного объекта или по строке с полным
именем на JVM.
Литерал .class удобен, когда тип известен на этапе
компиляции:
public class Main {
public static void main(String[] args) {
Class<?> fromLiteral = String.class;
System.out.println(fromLiteral.getSimpleName());
}
}
Если в руках уже есть экземпляр, тот же объект описания
даёт метод getClass у любого значения:
class Tag {
private final String code;
Tag(String code) {
this.code = code;
}
}
public class Main {
public static void main(String[] args) {
Tag unit = new Tag("a1");
Class<?> fromObject = unit.getClass();
System.out.println(fromObject.getSimpleName());
}
}
Когда имя класса приходит строкой, например из настроек,
используют Class.forName. Строка должна совпадать
с полным именем на JVM, включая пакет:
public class Main {
public static void main(String[] args) throws Exception {
Class<?> loaded = Class.forName("java.util.ArrayList");
System.out.println(loaded.getSimpleName());
}
}
Все три способа для одного и того же типа дают эквивалентное описание. Разница лишь в том, откуда программа узнала имя: из исходника, из объекта в памяти или из внешней строки.
Создайте класс Beacon с одним полем и получите
Class и у экземпляра. Сравните результаты
оператором == и выведите true или
false.