Ответ 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.