Создание объекта в Java
Когда конструктор найден, объект появляется вызовом
newInstance. Аргументы передают в том же
порядке, что и в объявлении конструктора.
Для открытого конструктора без дополнительных шагов
достаточно взять Constructor и вызвать
newInstance:
class Beacon {
private final String channel;
Beacon(String channel) {
this.channel = channel;
}
String channel() {
return channel;
}
}
public class Main {
public static void main(String[] args) throws Exception {
var ctor = Beacon.class.getDeclaredConstructor(String.class);
Object raw = ctor.newInstance("north");
Beacon unit = (Beacon) raw;
System.out.println(unit.channel());
}
}
Если конструктор закрытый, перед вызовом включают
доступ методом setAccessible:
class Vault {
private final int slot;
private Vault(int slot) {
this.slot = slot;
}
int slot() {
return slot;
}
}
public class Main {
public static void main(String[] args) throws Exception {
var ctor = Vault.class.getDeclaredConstructor(int.class);
ctor.setAccessible(true);
Vault unit = (Vault) ctor.newInstance(7);
System.out.println(unit.slot());
}
}
Метод newInstance возвращает Object,
поэтому результат часто приводят к нужному типу.
Исключения вроде InvocationTargetException
оборачивают ошибки внутри самого конструктора.
Сделайте класс Timer с конструктором,
принимающим строковую метку. Создайте экземпляр
только средствами рефлексии и выведите метку.