Como instanciar um objeto de forma dinâmica

6 respostas
G

Boa Noite Pessoal,

Estou fazendo um projeto em Java e me deparei com a seguinte situação.
Eu tenho um variavel que eu recebo um valor do tipo String nela, e gostaria de instanciar uma classe de acordo com o valor informado na variavel.

Por exemplo:

No meu banco de dados eu tenho os valores: Poste, Logradouro, Estado.

Para cada nome deste eu tenho uma classe chamada Poste, Logradouro e Estado, gostaria de instanciar meu objeto de forma automática, vamos super que na primeira execução o usuário forneça a palavra Poste, meu programa vai lá e faz o seguinte:

X = “Poste”;

X obj = new X();

Onde na verdade o programa faria a seguinte execução:

Poste obj = new Poste();

Isso é possivel ?
Preciso de uma ajuda de como fazer isto.

Desde já , muito obrigado.
Até mais.

6 Respostas

fuadksd

voce pode fazer assim:

Class c = Class.forName("seupacote." + x);
SuaClasse y = (SuaClasse) c.newInstance(); // Tem que fazer cast pois o newInstance() devolve Object.
J

Vamos la

Opção 1

String X = "Poste";

	if (X.equals("Poste")) {
		Poste poste = new Poste();
	} else if (X.equals("Logradouro ")) {
		Logradouro logradouro = new Logradouro();
	} else if (X.equals("Estado")) {
		Estado estado = new Estado();
	}

Opção 2 // Igual a 1 porem mais visivel

String X = "Poste";

	if (X.equals("Poste")) {
		Poste poste = new Poste();
	} 

	if (X.equals("Logradouro ")) {
		Logradouro logradouro = new Logradouro();
	} 

	if (X.equals("Estado")) {
		Estado estado = new Estado();
	}

Uma terceira opção seria com switch case, mas como o switch case só vai trabalhar com Strings no Java 7 você teria que atribuir códigos para os tipos só aceita inteiros.

Enfim, são 3 opções de uma mesma solução, podem existir outras.

Boa sorte e não desista o/

F

Olá amigo uma outra alternativa nao menos elegante, seria vc usar metodos get pra retornar o tipo de objeto desejado

um exemplo seria:

if(x.equals("Poste"))
    Poste p = getPoste();

public Poste getPoste()
{
   return new Poste();
}

PS: se vc tiver que fornecer varias instancias de objetos pra outros objetos de forma a diminuir o acoplamento entre eles seria interessante vc dar uma pesquisada sobre o padrao de projeto Factory

espero ter ajudado

Rodrigo_Sasaki

Acho que depende muito do que você vai fazer após instanciar seu objeto…

pode ser feito como foi dito acima, com condições, ou via Reflection.

Mas analise muito bem o que vai precisar fazer, hehehe…

G

Então na verdade

É que eu dei como exemplo 3 Objetos que existem classes, mais na verdade eu tenho um pacote grande de classes, mais de 30.

E o que eu queria realmente é dado o valor de uma variavel ele instancia de forma automatica meu objeto de acordo com o valor informado.

Por exemplo

String X = "Poste";
  X pt = new X();

Algo parecido com isto acima, por exemplo se o cara informar estado ele vai lá e faz Estado y = new Estado();
mais isto tudo de forma automatica;

pmlm

A primeira resposta resolve o teu problema…

Criado 19 de dezembro de 2011
Ultima resposta 20 de dez. de 2011
Respostas 6
Participantes 6