Есть ли способ создать экземпляр определенного класса с заданным именем класса (динамический) и передать параметры его конструктору.
Что-то вроде:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
Где "MyAttributeValue"
аргумент для конструктора MyClass
.
java
reflection
instantiation
TheLameProgrammer
источник
источник
newInstance()
это метод varargs (так же, какGetConstructor()
), нет необходимости явногоObject
создания массива.Object[]
аргумент, я предпочитаю создавать массив явно в этом случае.Вы можете использовать,
Class.forName()
чтобы получитьClass
объект нужного класса.Затем используйте,
getConstructor()
чтобы найти нужныйConstructor
объект.Наконец, вызовите
newInstance()
этот объект, чтобы получить новый экземпляр.источник
Вы можете использовать отражения
источник
Class.forName(className).getConstructor().newInstance();
;)Если в классе есть только один пустой конструктор (например, Activity или Fragment и т. Д., Классы Android):
источник
Constructor<?> ctor = clazz.getConstructor(String.class)
не похоже на работу для меня.при использовании (то есть)
getConstructor(String.lang)
конструктор должен быть объявлен публичным. В противном случаеNoSuchMethodException
выбрасывается.если вы хотите получить доступ к не публичному конструктору, вы должны использовать вместо этого (то есть)
getDeclaredConstructor(String.lang)
.источник
Вы хотите использовать java.lang.reflect.Constructor.newInstance (Object ...)
источник
Очень простой способ создать объект в Java, используя
Class<?>
передачу аргументов конструктора:Случай 1: - Вот небольшой код в этом
Main
классе:И вот
Base
структура класса:Случай 2: - Вы можете аналогичным образом кодировать конструктор с несколькими аргументами и конструктор копирования. Например, передача 3 аргументов в качестве параметра
Base
конструктору потребует создания конструктора в классе и изменения кода выше как:И здесь базовый класс должен выглядеть так:
Примечание: - Не забудьте обработать различные исключения, которые должны быть обработаны в коде.
источник
Если кто-то ищет способ создания экземпляра класса, несмотря на то, что класс следует шаблону Singleton, вот способ сделать это.
Это работает только для классов, которые реализуют шаблон синглтона с использованием частного конструктора.
источник
Вы также можете вызывать методы внутри созданного объекта.
Вы можете мгновенно создать объект, вызвав первый конструктор, а затем вызвав первый метод в созданном объекте.
источник
String
в качестве параметра? Становится немного грязно, когда вы меняете порядок конструктораgetConstructor(ClassName.class)
еще лучше, я думаю. Даже если порядок конструкторов меняется в классе, нет необходимости искать позицию вручнуюЕще один полезный ответ. Как мне использовать getConstructor (params) .newInstance (args)?
В моем случае конструктор моего класса принимает Webdriver в качестве параметра, поэтому используется следующий код:
источник