随笔-java反射


    /**
     * 获取class的 包括父类的                     
     * @param type
     * @return
     */
    public static Field[] getClassFields(Class<?> clazz) {
        List<Field> list = new ArrayList<Field>();
        Field[] fields;
        do{
            fields = clazz.getDeclaredFields();
            for(int i = 0;i<fields.length;i++){
                list.add(fields[i]);
            }
            clazz = clazz.getSuperclass();
        }while(clazz!= Object.class&&clazz!=null);
        return list.toArray(fields);
    }


/**
     * 获取方法
     * @param name
     * @param pojoClass
     * @return
     * @throws Exception
     */
    public static Method getMethod(String name, Class<?> pojoClass)
            throws Exception {
        StringBuffer getMethodName = new StringBuffer("get");
        getMethodName.append(name.substring(0, 1).toUpperCase());
        getMethodName.append(name.substring(1));
        //方法名字,目标对象的Class
        return pojoClass.getMethod(getMethodName.toString(),new Class[]{});
    }



/**
     * 是不是java基础类
     * @param field
     * @return
     */
    public static boolean isJavaClass(Field field) {
        Class<?> fieldType = field.getType();
        boolean isBaseClass = false;
        if(fieldType.isArray()){
            isBaseClass = false;
        }else if (fieldType.isPrimitive()||fieldType.getPackage()==null
                || fieldType.getPackage().getName().equals("java.lang")
                || fieldType.getPackage().getName().equals("java.math")
                || fieldType.getPackage().getName().equals("java.util")) {
            isBaseClass =  true;
        }
        return isBaseClass;
    }



运用:

public static void reflectField(String filed,Object obj,Class clazz){
        try {    
            Method method=Reflect.getMethod(filed,clazz);
            //Method的调用  ( 那个对象的方法,传什么参)
            String name=(String) method.invoke(obj, new Object[]{});
            System.out.println(name);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) throws ClassNotFoundException {
        TSStudent stu=new TSStudent();
        stu.setName("xuliangjun");
        stu.setId("1");
        stu.setSex("女");
        stu.setClassName("一年级");
        
//        Class clazz=stu.getClass();
//        Field[] fs=clazz.getDeclaredFields();
        Field[] fs=getClassFields(stu.getClass());
        for(Field f:fs){
            Reflect.reflectField(f.getName(),stu,stu.getClass());
        }
    }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。