Два пути:
Метод 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 не может найти или не может загрузить ваш класс
- класс, который вы пытаетесь создать, не имеет нужных конструкторов
- сам конструктор выдал исключение
- конструктор, который вы пытаетесь вызвать, не является общедоступным
- был установлен менеджер безопасности, который предотвращает появление отражения