Tenho uma Interface X que várias classes implementam, essa classes são mapeadas por um arquivo XML, portanto, recebo o nome das classes em String. A Interface X obriga a implementação de um método y…
O que preciso fazer é, pegar o nome da classe com a String que eu tenho, criar uma instância da implementação e chamar o método y.
algo do tipo:
public interface X{
public void y():
}
public class Main{
public static void main(String [] a){
String[] classes = //recebe o nome das classes que implementam x...
for(...){
X x = //pega a implementação de X e
x.y(); // chama o método y()
}
}
}
A tese é facil, mas estou tendo problemas na prática ^^
Não se esqueça de tratar as exceptions! Estou supondo que todas as classes citadas têm um construtor público sem argumentos.
(Estou mostrando o código em Java 5.0, remova os "generics" se for usar em Java 1.4 ou anterior.)
interface X {
public void y();
}
class A implements X {
public A() {}
public void y () { System.out.println ("A.y"); }
}
class B implements X {
public B() {}
public void y () { w(); }
private void w() { System.out.println ("B.y"); }
}
class C implements X {
public C() {}
public void y () { z(); }
private void z() { System.out.println ("C.y"); }
}
class ClassForName {
public static void main(String[] args)
throws ClassNotFoundException, InstantiationException,
IllegalAccessException
{
// Deve imprimir: A.y, B.y, C.y
String[] nomeClasses = {"A", "B", "C"};
for (String nomeClasse : nomeClasses) {
Class<? extends X> klass = Class.forName (nomeClasse).asSubclass (X.class);
X x = klass.newInstance();
x.y();
}
}
}