天天看點

随筆-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

     * @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

    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());