Usando Reflect e Instanciando!

3 respostas
EuclidesFilizola

Olá pessoal, eu estou com o seguinte problema. Tenho um código, no qual eu preciso usar o “class.newInstance()”. porém eu não sei como usa-lo direito e nem sei se o uso está certo. então ai está o código.

import java.lang.annotation.Annotation;
import java.lang.reflect.*;
import java.util.ArrayList;
import java.util.List;

import PegaCampos.Information;
	 public class TakeField {
	 
	   public static void main(String args[]) {
	         try {
	        	 
	             Class cls = Class.forName("PegaCampos.Teste"); // carrega classe
	             Object obj = cls.newInstance();	             
	             Field listaCampo[] = cls.getDeclaredFields(); //array que pega os campos
	                 for (int i = 0; i < listaCampo.length; i++) {
	                  Field fld = listaCampo[i];
	                  System.out.println("nome campo = " + fld.getName());
	                  System.out.println("membro da classe = " + fld.getDeclaringClass());
	                  System.out.println("tipo = " + fld.getType());
	                 
	                 
	                 Annotation [] annotations = fld.getAnnotations(); // array de annotations
	                 
	                 for (Annotation a : annotations){  
	                       System.out.println(a);
				System.out.println("##");  
	                       
	                   }  
	                 
	                 	                 
	                	/*for (int j = 0; j< a.length; j++){
	                		System.out.println(a[j]);
	                		System.out.println("##"+((Information)a[j]).idade());
	                		
	                	           	}
	                	*/
	                
	                 }                     
	             }catch (Throwable e) {
	               System.err.println(e);
         }
	  }
    }

Porém me disseram que eu tenho que criar as instancias da classe. eu nao sei como fazer isso… só sei que é “class.newInstance()”. não sei como usa-lo. Alguém ae pode me ajudar ??? … agradeço !

3 Respostas

victorwss
Class cls = Class.forName("PegaCampos.Teste"); // carrega classe  
Object obj = cls.newInstance();

Sim, isso está certo. Mas para funcionar, vale algumas lembranças:

A classe PegaCampos.Teste tem que existir e estar no classpath (senão ele não vai achar a classe). Ela não pode ser uma interface, uma annotation ou uma classe abstrata. Tem que ser uma classe normal. E ela tem que ter um construtor público e sem parâmetros.

psandrelli

Dá uma olhada nesse post, pode te ajudar. http://www.guj.com.br/posts/list/3268.java#15884

kaique

Cara, dá uma olhada nesse link aqui…
http://java.sun.com/javase/6/docs/api/java/lang/reflect/package-summary.html
Já que você tem a instância do objeto e não consegue usá-lo dá uma estudada em Field, que seriam as variáveis da tua classe instanciada, e Method, que seria um método declarado na tua classe instanciada.
Na API tem indicando como tu pode acessar uma variável e invocar um método do objeto. Bons estudos…

[]'s.

Criado 18 de janeiro de 2008
Ultima resposta 18 de jan. de 2008
Respostas 3
Participantes 4