Reflection

Olas,

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 ^^

Obrigado,

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();
        }
    }
}