有一些类的实例,我想通过反射机制动态获取他们的属性的名字和class,这些属性有可能是一般类或者自定义类的数组,比如String[],如果是数祖类的话,希望能获取这个数组的长度,请问如何来实现~

解决方案 »

  1.   

    代码,供参考。
    import java.lang.reflect.*;class BB
    {}
    class  AA
    {
        private String[] str = {"1", "2", "3"};
        private BB[] b;
    }
    public class Test {
        public Test() {
        }
        public static void main(String[] args) throws Exception{
            
            AA o = new AA();
            Class a = o.getClass();
            Field[] fields = a.getDeclaredFields();
            for(int i = 0; i < fields.length; i++){
                Field f = fields[i];
                f.setAccessible(true);
                String type = f.getType().toString();
                System.out.println(f.getName());
                System.out.println(type);
                
                if(type.indexOf("[L") != 0){//判断是否为数组类型
                    Object object = f.get(o);
                    if (object == null) {
                        System.out.println("null");
                    } else {
                        Object[] array = (Object[]) object;
                        System.out.println(array.length);
                    }
                }
          }
        }
    }
      

  2.   

    public static void main(String[] args) {
    String[] arr = new String[]{"a", "b", "c"};
    if (arr.getClass().getComponentType() != null) {//判断是否为数组类型
    System.out.println(java.lang.reflect.Array.getLength(arr));
    }
    }
      

  3.   



    package org.leelin.demo;import java.lang.reflect.Field;
    import java.util.ArrayList;public class ReflectionTester { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Integer[] i=new Integer[]{1,2,3,4};
    Object obj=new ArrayList();
    getClassInfo(i);
    getClassInfo(obj);
    } private static void getClassInfo(Object o) {
    // TODO Auto-generated method stub
    Class c=o.getClass();
    if(c.getName().indexOf('[')!=-1){
    Object[] obj= (Object[]) o;
    System.out.println(obj.length);
    return;
    }
    Field[] fields=c.getDeclaredFields();
    System.out.println("class:"+c.getName());
    for(Field f:fields){
    System.out.println(f.getName());
    }
    }

    }