Два способи:
Спосіб 1 - лише для класів, що мають конструктор без аргументів
Якщо у вашому класі є конструктор без аргументів, ви можете отримати Classоб’єкт, Class.forName()використовуючи newInstance()метод для створення екземпляра (однак, будьте обережні, що цей метод часто вважається злим, оскільки він може перемогти перевірені винятки Java).
Наприклад:
Class<?> clazz = Class.forName("java.util.Date");
Object date = clazz.newInstance();
Спосіб 2
Альтернативний більш безпечний підхід, який також працює, якщо у класу немає конструкторів без аргументів - це запитувати об’єкт класу, щоб отримати його Constructorоб'єкт і викликати newInstance()метод на цьому об’єкті:
Class<?> clazz = Class.forName("com.foo.MyClass");
Constructor<?> constructor = clazz.getConstructor(String.class, Integer.class);
Object instance = constructor.newInstance("stringparam", 42);
Обидва методи відомі як рефлексія . Зазвичай вам доведеться вловлювати різні винятки, які можуть статися, включаючи такі речі:
- JVM не може знайти або не може завантажити ваш клас
- клас, який ви намагаєтеся інстанціювати, не має правильного типу конструкторів
- сам конструктор кинув виняток
- конструктор, який ви намагаєтеся викликати, не є загальнодоступним
- інстальовано менеджер з безпеки та запобігає появі роздумів