método class.forname() [RESOLVIDO]

oi pessoal,

sei que o método class.forname() carrega uma determinada classe e devolve uma referência a um objeto do tipo class que representa a classe carregada.
Como ele faz isso?
:?

Obrigada

Chama-se “Reflection” :slight_smile:

Por exemplo, se vc tem uma classe “Pessoa” no pacote “com.empresa”, e quer criar uma instancia dinamicamente, basta fazer

Pessoa p = (Pessoa)Class.forName("com.empresa.Pessoa").newInstance();

Rafael

E os parâmetros?

Quando você quer criar uma instância de uma classe mas o construtor exige parâmetros, você precisa referenciar um objeto do tipo Constructor. Vou dar um exemplo.
Digamos que você queira criar um java.awt.Point usando o construtor que exige 2 parâmetros: int e int.

import java.lang.reflect.*;

class TesteConstructor {
    public static void main (String[] args) throws Exception {
		// Criando um objeto, chamando o construtor new Point (10, 20) via reflection. 
		Class<?> pointClass = Class.forName ("java.awt.Point");
		Constructor<?> constructor = pointClass.getConstructor (int.class, int.class);
		Object obj = constructor.newInstance (10, 20); // new Point (10, 20);
		// Comprovando que este objeto é da classe Point:
		System.out.println (obj.getClass().getName()); // deve imprimir "java.awt.Point"
		// Comprovando que os campos x e y foram preenchidos corretamente:
		// 1) Obtendo o valor do membro público x, que é int
		Field fieldX = pointClass.getDeclaredField ("x");
		System.out.println (fieldX.getInt (obj)); // deve imprimir "10"
		// 2) Chamando getY(), que retorna um double
		Method methodGetY = pointClass.getDeclaredMethod ("getY"); // método sem parâmetros
		System.out.println (methodGetY.invoke (obj)); // deve imprimir "20.0" 
	}
}