Instanciando classes dinamicamente

3 respostas
fiabani

Pessoal, é possivel em java instanciar classes dinamicamente?

por exemplo, eu recebo o nome de uma classe e um metodo em String e instancio, algo tipo isso:

“classe” obj = new “classe”();

obj.“metodo”();

No PHP eu faço assim

$class = (string) $_POST['class'];
$method = (string) $_POST['method'];
$obj = new $class($this);
if(method_exists($obj, $method)){
        call_user_func( array($obj , $method));
}

obrigado

3 Respostas

D

Sim! =]

Procure no Google e aqui no Guj mesmo sobre a API Reflection.

Espero ter ajudado. Até.

renamed

Sim!!

package princ;
import princ.*;

public class Princ {
		public static void main (String[] a){
			try {
				Class.forName("princ.Files").newInstance();
				System.out.println("Deu Certo");
			} catch (InstantiationException e) {
				System.out.println("e1 " + e.getMessage());
			} catch (IllegalAccessException e) {
				System.out.println("e2 " + e.getMessage());
			} catch (ClassNotFoundException e) {
				System.out.println("e3 " + e.getMessage());
			}
		}

}

ATENÇÃO: É NECESSÁRIO INFORMAR EM QUAL PACOTE ESTÁ A CLASSE, MESMO QUE AS CLASSES ESTEJAM NO MESMO PACOTE!! :D

criador

Bom dia.

Você pode criar uma Interface e implementar os métodos desta interface nas classes que você quer intanciar dinamicamente.
Assim, você terá acesso aos métodos desta interface, porém os resultados serão retornados conforme a implementação de cada classe.

Se você quer apenas instanciar uma classe dinamicamente, você pode fazer como o renamed demonstrou no exemplo.

Este exemplo que estou te mostrando, seria para você trabalhar com várias classes dinamicamente.

Exemplo:

Class[] array_classes = {Classe1.class, Classe2.class, Classe3.class};
		
		for (int i = 0; i < array_classes.length; i++) {
			try {
				System.out.println(((InterfaceTeste) array_classes[i].forName(array_classes[i].getName()).newInstance()).metodo());
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		}

As classes Classe1, Classe2 e Classe3, irão implementar o método metodo() da interface InterfaceTeste da forma que bem entenderem.
Sendo assim, você percorrerá cada classe e terá o conteúdo do método metodo() que cada uma implementou.

Espero ter ajudado.

Abraço!

Criado 25 de setembro de 2009
Ultima resposta 25 de set. de 2009
Respostas 3
Participantes 4