Ответ 1
"Использование java.lang.reflect
" ответит на все ваши вопросы. Сначала выберите объект Class
, используя Class.forName()
, а затем:
Если я хочу создать экземпляр класса, который был получен с помощью
forName()
, я должен сначала спросить его о объектеjava.lang.reflect.Constructor
, представляющем конструктор, который я хочу, а затем попроситьConstructor
создать новый объект. МетодgetConstructor(Class[] parameterTypes)
вClass
будет извлекатьConstructor
; Затем я могу использовать этотConstructor
, вызывая его методnewInstance(Object[] parameters)
:Class myClass = Class.forName("MyClass"); Class[] types = {Double.TYPE, this.getClass()}; Constructor constructor = myClass.getConstructor(types); Object[] parameters = {new Double(0), this}; Object instanceOfMyClass = constructor.newInstance(parameters);
В Class
есть метод newInstance()
, который может казаться вам нужным. Не используйте его. Он молча конвертирует проверенные исключения в непроверенные исключения.
Обратите внимание, что этот метод распространяется на любое исключение, созданное конструктором с нулевым значением, включая проверенное исключение. Использование этого метода эффективно обходит проверку исключения времени компиляции, которая в противном случае была бы выполнена компилятором. Метод
Constructor.newInstance
позволяет избежать этой проблемы, обернув любое исключение, созданное конструктором в (проверено)InvocationTargetException
.