Конструкторы в Java
Создание объекта средствами рефлексии начинается с поиска
нужного конструктора. Его описание имеет тип
Constructor: там перечислены типы параметров
и модификатор доступа.
Метод getDeclaredConstructors возвращает все
конструкторы, объявленные в классе, включая закрытые:
class Crate {
private final String tag;
Crate(String tag) {
this.tag = tag;
}
private Crate() {
this.tag = "empty";
}
}
public class Main {
public static void main(String[] args) {
for (var ctor : Crate.class.getDeclaredConstructors()) {
System.out.println(ctor.getParameterCount());
}
}
}
Метод getConstructors показывает только открытые
конструкторы. Для класса с одним публичным конструктором
и одним закрытым длины списков будут различаться:
class Crate {
public Crate(String tag) {}
private Crate() {}
}
public class Main {
public static void main(String[] args) {
System.out.println(Crate.class.getConstructors().length);
System.out.println(Crate.class.getDeclaredConstructors().length);
}
}
Конкретный конструктор можно взять по типам параметров
методом getDeclaredConstructor. Если подходящего
варианта нет, будет выброшено исключение
NoSuchMethodException:
class Crate {
private final String tag;
Crate(String tag) {
this.tag = tag;
}
}
public class Main {
public static void main(String[] args) throws Exception {
var ctor = Crate.class.getDeclaredConstructor(String.class);
System.out.println(ctor.getName());
}
}
Класс Pairing имеет конструктор с двумя
целыми параметрами. Получите его и выведите число
параметров методом getParameterCount.