运用java反射机制还原类的属性,方法,修饰符

来源:互联网 发布:数据采集软件火车头 编辑:程序博客网 时间:2024/06/07 18:10

运用java反射机制还原类的属性,方法,修饰符

运用java反射机制将类的所有所属性,方法还原,不玩虚的咱直接干代码。

工具类GetClassUtil

package com.zlf.info;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import com.sun.org.apache.bcel.internal.generic.NEW;/** * 创建时间:2016-10-26 上午9:13:11 项目名称:ReflectDemo *  * @author zhoulongfei * @version 1.0 * @since JDK 1.6.0_21 文件名称:GetClassUtil.java 类说明: 通过java反射机制获取类的方法,属性,构造方法等等。。。 */public class GetClassUtil {    private static Map<Integer, String> typeMap = new HashMap<Integer, String>() {        // 静态构造方法        {            put(0, "  ");            put(1, "PUBLIC");            put(2, "PRIVATE");            put(4, "PROTECTED");            put(8, "STATIC");            put(16, "FINAL");            put(32, "SYNCHRONIZED");            put(64, "VOLATILE");            put(128, "TRANSIENT");            put(256, "NATIVE");            put(512, "INTERFACE");            put(1024, "ABSTRACT");            put(2048, "STRICT");        }    };    /**     * 获得类的方法     *      * @param o     */    public static void getClassMethod(Object o) {        Class c = o.getClass();        // 获得类名        System.out.println(c.getSimpleName() + " 类下的所有方法如下:");        // getDeclaredMethods获取该类中所有自己声明的方法名        Method[] methods = c.getDeclaredMethods();        for (Method method : methods) {            // 获取方法的访问修饰符 ,typeMap.get(modifier).toLowerCase()取静态对应值并转化为小写输出            int modifier = method.getModifiers();            // 获得返回值类型            Class returntype = method.getReturnType();            System.out.print(typeMap.get(modifier).toLowerCase() + " "                    + returntype.getSimpleName() + " ");            // 获得方法名            System.out.print(method.getName() + "(");            Class[] classes = method.getParameterTypes();            Class c1 = null;            for (int i = 0; i < classes.length; i++) {                c1 = classes[i];                if (i < classes.length - 1) {                    System.out.print(c1.getSimpleName() + ",");                } else {                    System.out.print(c1.getSimpleName());                }            }            System.out.println(")");            // for (Class class1 : classes) {            //            // System.out.print(class1.getSimpleName() + ",");            // }            // System.out.println(")");        }    }    /**     * 获得类的属性     *      * @param o     */    public static void getClassField(Object o) {        // 获得类对象类型        Class c = o.getClass();        System.out.println(c.getSimpleName() + " 类下的所有属性如下:");        // 获得方法数组        Field[] fields = c.getDeclaredFields();        // 遍历数组        for (Field field : fields) {            // 获得int修饰符            int modifier_int = field.getModifiers();            // System.out.print(modifier_int);            // 转化string修饰符            String modifier = typeMap.get(modifier_int).toLowerCase();            // 获取属性名称            String fieldName = field.getName();            // 获得属性的类型            Class type = field.getType();            System.out.println(modifier + " " + type.getSimpleName() + " "                    + fieldName);        }    }}

测试类 ReflectTest

package com.zlf.info;/** * 创建时间:2016-10-26 上午9:42:16 项目名称:ReflectDemo *  * @author zhoulongfei * @version 1.0 * @since JDK 1.6.0_21 文件名称:ReflectTest.java 类说明: */public class ReflectTest {    public static void main(String[] args) {        Person p = new Person();        // 获取所有属性        GetClassUtil.getClassField(p);        // 获取所有方法        System.out.println("--------------------------------");        GetClassUtil.getClassMethod(p);    }}class Person {    private String name;    private int age;    private String sex;    private String address;    private String hobbies;    public Person() {    }    public Person(String name, int age, String sex, String address,String hobbies) {        super();        this.name = name;        this.age = age;        this.sex = sex;        this.address = address;        this.hobbies = hobbies;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public String getHobbies() {        return hobbies;    }    public void setHobbies(String hobbies) {        this.hobbies = hobbies;    }    private void printInfo(String str, int i, int j) {    }    protected void Info(String str, int i, int j) {    }}

程序运行结果
这里写图片描述

结语:具体代码就不再一 一解释,代码备注上已经说明清楚,如程序中有错误欢迎指正,本博客后续将继续更新。

0 0