初学,请问下写java反射的时候,真实的情况下,有没有要得到他所有的父类、包含的字段(非基本类型)的全部信息,然后用递归啊?就是像core java书上的例子那样? 如下:import java.lang.reflect.*;
import java.util.*;
import java.text.*;public class OATest{
public static void main(String args[]){
ArrayList<Integer> s = new ArrayList<Integer>();
for(int i=1;i<=5;i++){
s.add(i*i);
}
System.out.println(new OA().toString(s));
}
}class OA{
public String toString(Object obj){
if(obj == null){
return "null";
}
Class cl = obj.getClass();
if(cl == String.class){
return (String)obj;
}
if(cl.isArray()){
String r = cl.getComponentType()+"[]{";
for(int i=0;i<Array.getLength(obj);i++){
if(i>0){
    r += ",";
}
Object val = Array.get(obj,i);
if(cl.getComponentType().isPrimitive()){
r += val;
}else{
r += toString(val);
}
}
return r + "}";
}
String r = cl.getName();
do{
r += "[";
Field[] fields = cl.getDeclaredFields();
AccessibleObject.setAccessible(fields,true);
for(Field f : fields){
if(!Modifier.isStatic(f.getModifiers())){
if(!r.endsWith("[")){
r += ",";
}
r += (f.getName() + "=");
try{
Class t = f.getType();
Object val = f.get(obj);
if(t.isPrimitive()){
r += val;
}else{
r += toString(val);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
r += "]";
cl = cl.getSuperclass();
}while(cl != null);
return r;
}
}

解决方案 »

  1.   

    如果楼主要做一些代码生成工具,或者类似eclipse的outline功能,或者像SSH这些大型框架,可能需要用到,一般的应用还是用不到的
      

  2.   

    一看需求,二看你自己的的设计实现。
    我原来做过一个数据validation的功能,就是在所有filed上家annotation,然后反射找出所有field一个一个做验证。当然如果不做反射,也可以自己写代码一个一个做验证。所以还是看自己选择用哪种方式。
      

  3.   

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。
      

  4.   


    type t = new type();
    Class cl = t.getClass();//获取属性,方法,注释等