Java как создать экземпляр класса из строки

Возможный дубликат:
Создать новый класс из переменной в Java

У меня есть строка

String className = "DummyClass"

Теперь я хочу создать объект класса, где имя класса className. Это что-то вроде

Object className = new className() // I know it not possible.

Я хочу знать, как это сделать...

Ответы

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

Ответ 2

Вы можете использовать reflection. Например,

Object o = Class.forName(className).newInstance(); 

Но className должен содержать полный путь к классу.