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
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”
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"
}
}