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()"? который подробно объясняет, как все это работает.