Pessoal minha duvida é a sequinte, como posso instanciar um objeto com base em um descritor(string) em tempo de execução? E como obter metadados da classe instanciada, como nome de atributos?
Abraço e t+
Este exemplo é para Java 5.0. Em Java 1.4 o exemplo é mais simples (removendo os <> e o “asSubclass”, e pondo alguns casts, deve funcionar).
Este é apenas o exemplo de instanciar uma classe pelo nome. Para obter os métodos, veja os métodos da classe java.lang.Class.
Suponha que você tenha várias classes que implementam a interface Componente:
package abc.xyz;
interface Componente {
int executa (int parametro);
}
....
package abc.xyz;
class Classe1 implements Componente {
public int executa (int parametro) {
return parametro + 1;
}
}
....
package abc.xyz;
class Classe2 implements Componente {
public int executa (int parametro) {
return parametro - 2;
}
}
e você queira instanciar a classe abc.xyz.Classe1 pelo seu nome. Você deve fazer:
package abc.xyz;
class TestComponente {
public static void main(String[] args) throws Exception {
Class<? extends Componente> cl = Class.forName ("abc.xyz.Classe1").asSubclass(Componente.class);
Componente comp = cl.newInstance();
System.out.println (comp.executa(2)); // deve imprimir 3
cl = Class.forName ("abc.xyz.Classe2").asSubclass(Componente.class);
comp = cl.newInstance();
System.out.println (comp.executa(2)); // deve imprimir 0
}
}
considero que o padrão factory seja a maneira mais indicade de se fazer isso:
http://www.guj.com.br/articles/137