Existe uma maneira de criar uma instância de uma classe específica, dado o nome da classe (dinâmico) e passar parâmetros para seu construtor.
Algo como:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
Onde "MyAttributeValue"
está um argumento para o construtor de MyClass
.
java
reflection
instantiation
TheLameProgrammer
fonte
fonte
newInstance()
é um método varargs (assim comoGetConstructor()
), não há necessidade deObject
criação explícita de matriz.Object[]
argumento, prefiro criar a matriz explicitamente neste caso.Você pode usar
Class.forName()
para obter umClass
objeto da classe desejada.Em seguida, use
getConstructor()
para encontrar oConstructor
objeto desejado .Por fim, chame
newInstance()
esse objeto para obter sua nova instância.fonte
Você pode usar reflexos
fonte
Class.forName(className).getConstructor().newInstance();
;)Se a classe tiver apenas um construtor vazio (como Activity ou Fragment etc, classes android):
fonte
Constructor<?> ctor = clazz.getConstructor(String.class)
não parecia funcionar para mim.ao usar (ou seja),
getConstructor(String.lang)
o construtor deve ser declarado público. Caso contrário, aNoSuchMethodException
é lançada.se você quiser acessar um construtor não público, precisará usar (por exemplo)
getDeclaredConstructor(String.lang)
.fonte
Você deseja usar java.lang.reflect.Constructor.newInstance (Object ...)
fonte
Maneira muito simples de criar um objeto em Java usando
Class<?>
argumentos do construtor que passam:Caso 1: - Aqui está um pequeno código nesta
Main
classe:E aqui está a
Base
estrutura da classe:Caso 2: - Você pode codificar da mesma forma para o construtor com vários argumentos e copiar o construtor. Por exemplo, passar 3 argumentos como parâmetro para o
Base
construtor precisará que o construtor seja criado na classe e um código seja alterado acima como:E aqui a classe Base deve se parecer com:
Nota: - Não se esqueça de lidar com as várias exceções que precisam ser tratadas no código.
fonte
Se alguém estiver procurando uma maneira de criar uma instância de uma classe, apesar da classe seguir o Padrão Singleton, aqui está uma maneira de fazê-lo.
Isso funciona apenas para classes que implementam padrão singleton usando um construtor privado.
fonte
Você também pode chamar métodos dentro do objeto criado.
Você pode criar um objeto instantaneamente chamando o primeiro construtor e, em seguida, o primeiro método no objeto criado.
fonte
String
como parâmetro? Torna-se um pouco confuso quando você alterar a ordem de construtorgetConstructor(ClassName.class)
é melhor, eu acho. Mesmo que a ordem de construtores muda na classe, não há necessidade de encontrar a posição manualmenteOutra resposta útil. Como uso o getConstructor (params) .newInstance (args)?
No meu caso, o construtor da minha classe usa o Webdriver como parâmetro, então usado abaixo do código:
fonte