反射笔记二

来源:互联网 发布:java分布式开发面试题 编辑:程序博客网 时间:2024/06/09 21:21
通过相应的api 获取成员变量并且修改相应的值
Field 和Field[] 专门用来保存成员变量数组和成员变量
我也不知道这个东西什么时候会用到,但是我觉得一定会有用的。

测试类
public class DemoTwo {    int i;    public float f;    protected  boolean b;    private  String s;}

具体实现:
public class TestMain {    public static void main (String[] args){        DemoTwo demoTwo=new DemoTwo();        Class twoClass=demoTwo.getClass();        Field[] declaredFileds=twoClass.getDeclaredFields();        for(int i=0;i<declaredFileds.length;i++){            Field field=declaredFileds[i];            System.out.println("名称为:"+field.getName());            Class fileType=field.getType();            System.out.println("类型为:"+fileType);            boolean isTurn=true;            while(isTurn){                try{                    isTurn=false;                    System.out.println("修改前的值为:"+field.get(demoTwo));                    if(fileType.equals(int.class)){                        System.out.println("利用方法setInt()修改成员变量的值");                        field.setInt(demoTwo,777);                    }else if(fileType.equals(float.class)){                        System.out.println("利用方法setFloat()修改成员变量");                        field.setFloat(demoTwo,2017.01f);                    }else if(fileType.equals(boolean.class)){                        System.out.println("利用方法setBoolean()修改成员变量");                        field.setBoolean(demoTwo,true);                    }else{                        System.out.println("利用方法set()修改成员变量");                        field.set(demoTwo,"MWQ");                    }                    System.out.println("修改后的值"+field.get(demoTwo));                }catch (Exception e){                    System.out.println(e.getMessage());                    field.setAccessible(true);                    isTurn=true;                }            }            System.out.println();        }    }}
运行结果:
名称为:i
类型为:int
修改前的值为:0
利用方法setInt()修改成员变量的值
修改后的值777

名称为:f
类型为:float
修改前的值为:0.0
利用方法setFloat()修改成员变量
修改后的值2017.01

名称为:b
类型为:boolean
修改前的值为:false
利用方法setBoolean()修改成员变量
修改后的值true

名称为:s
类型为:class java.lang.String
class refelect_demo.TestMain cannot access a member of class refelect_demo.DemoTwo with modifiers "private"
修改前的值为:null
利用方法set()修改成员变量
修改后的值MWQ

getName()  获得成员变量名称
getType() 获得成员变量类型 Class对象
get(Object obj) 获得指定对象obj中成员变量的值,返回为Object类型
set(Object obj,Object value) 将指定的obj中成员变量的值设置为value;
getInt(Object obj) 获得指定对象obj中类型为int的成员变量的值;
setAccessible(boolean flag) 设置这个方法可以直接忽略权限直接访问private等私有权限的成员变量 





原创粉丝点击