Criar uma instância utilizando o nome da classe e chamar construtor
Existe uma forma de criar uma instância de uma determinada classe dada o nome da classe (dinâmica) e passar parâmetros ao seu construtor.
Algo do género:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
Onde "MyAttributeValue"
é um argumento para o construtor de MyClass
.
298
10
Sim, algo do género:
Isso só funcionará para um único parâmetro de corda, claro, mas pode modificá-lo muito facilmente.
Note-se que o nome da classe tem de ser um nome totalmente qualificado, ou seja, incluindo o namespace. Para as classes aninhadas, é necessário usar um dólar (como aquele's que o compilador usa). Por exemplo:
Para obter o objecto
Class
para isso, você'necessitariaClass.forName("foo.Outer$Nested")
.Pode utilizar
Class.forName()
para obter um objectoClass
da classe desejada.Depois utilizar getConstructor()` para encontrar o objecto desejado
Constructor
.Finalmente, ligue
newInstance()
sobre esse objecto para obter a sua nova instância.Pode usar reflexos
Se a classe tem apenas um construtor vazio (como Activity ou Fragment, etc, classes andróides):
ao utilizar (isto é)
getConstructor(String.lang)
o construtor tem de ser declarado público. Caso contrário, um `NoSuchMethodException' é lançado.Se você quiser acessar um non-public constructor você tem que utilizar (i.e.)
getDeclaredConstructor(String.lang)
.Você quer estar usando [java.lang.reflect.Constructor.newInstance(Object...)][1]
[1]: http://download.oracle.com/javase/6/docs/api/java/lang/reflect/Constructor.html#newInstance%28java.lang.Object...%29
Muito simples para criar um objeto em Java utilizando
Class<?>
com o(s) argumento(s) do construtor passando:**Paso 1:-*** Aqui, há um pequeno código nesta classe "Principal":
E, aqui está a estrutura de classes
Base
:**Caso 2:-*** Você, pode codificar de forma similar para construtor com múltiplos argumentos e construtor de cópias. Por exemplo, passando 3 argumentos como parâmetro para o construtor
Base
precisará que o construtor seja criado na classe e uma mudança no código acima como:E aqui a classe Base deve, de alguma forma, ser parecida:
**Note:-** Don'não se esqueça de tratar das várias excepções que precisam de ser tratadas no código.*
Você também pode invocar métodos dentro do objeto criado.
O usuário pode criar o objeto instantaneamente ao invocar a primeira restrição e depois invocar o primeiro método no objeto criado.
Outra resposta útil. Como eu uso getConstructor(params).newInstance(args)?](https://stackoverflow.com/a/9335669/3181500)
No meu caso, o construtor da minha classe's toma Webdriver como parâmetro, assim utilizado abaixo do código:
Se alguém está procurando uma maneira de criar uma instância de uma classe apesar da classe seguir o Padrão de Singleton, aqui está uma maneira de fazê-lo.
Isto só funciona para classes que implementam padrão singleton utilizando um construtor privado.