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

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

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

String className = "DummyClass"

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

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

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

3 ответа

Решение

"С помощью 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);

E сть newInstance() метод на Class Это может показаться, что вы хотите. Не используйте это. Он молча преобразует проверенные исключения в непроверенные исключения.

Обратите внимание, что этот метод распространяет любое исключение, выданное нулевым конструктором, включая проверенное исключение. Использование этого метода эффективно обходит проверку исключений во время компиляции, которая в противном случае выполнялась бы компилятором. Constructor.newInstance Метод избегает этой проблемы, оборачивая любое исключение, выданное конструктором в (проверено) InvocationTargetException,

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

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

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

Проверьте ответ на этот вопрос: в чем разница между "Class.forName()" и "Class.forName(). NewInstance()"? который подробно объясняет, как все это работает.

Другие вопросы по тегам