Два способи:
Спосіб 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 не може знайти або не може завантажити ваш клас
- клас, який ви намагаєтеся інстанціювати, не має правильного типу конструкторів
- сам конструктор кинув виняток
- конструктор, який ви намагаєтеся викликати, не є загальнодоступним
- інстальовано менеджер з безпеки та запобігає появі роздумів