Reflection

Pessoal eu venho do PHP, com experiencia tb em C# e VB.NET e estou começando agora no java.

O que eu gostaria de fazer, acredito ser simples: Instanciar uma classe e executar seus métodos dinâmicamente em tempo de execução.

Estou usando Jquery no meu front e gostaria de chamar via ajax sempre o mesmo arquivo (exemplo engine.java) e gostaria que esse arquivo instanciasse uma classe de acordo com os parâmetros passados.

Em PHP eu faria da seguinte forma:

$request = $_POST['request'];

$class = $request->class;
$par = $request->par;
$method = $request->method;

$fl = new $class();
$fl->$method($par);

Mas e em Java como eu faço isso?

Cara procura no google por reflection tem bastante tutoriais sobre o assunto.

Abraço

Oi!

Para criar uma classe basta usar o forName e o newInstance:

Class.forName("br.com.guj.Test").newInstance();

Essa classe já deve existir no seu Classpath, caso contrário, não será possível cria-la.
Para executar os métodos, estou meio enferrujado, mas acredito que tu possa usar o getDeclaredMethod e em seguida a classe Method.

O método getDeclaredMethod você pode passar o nome do método e seus respectivos parametros.
Infelizmente estou sem possibilidade de testar código agora e fazer isso de cabeça é dificilll, mas fica a dica.

E como disseram, na net tem bastante tuto para chamar o método via reflection :slight_smile:
Abraços!

Você pode recuperar a classe por seu nome:

Class<?> clazz = Class.forName("com.LOL")

Do class você pode pegar os métodos:

//Não tenho certeza se aqui vem os métodos da superclasse
Method[] methods = clazz.getDeclaredMethods();

Ou um método em específico

Method method = clazz.getMethod("laugh")

é possivel invocar o método, porém é necessário uma instância do Objeto que o contém:

method.invoke(clazz.newInstance,"hahaha")

Usei para converter um XML ou JSON em um objeto…faz tempo…+ acho que assim já funciona