博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射(二)
阅读量:4280 次
发布时间:2019-05-27

本文共 2287 字,大约阅读时间需要 7 分钟。

(1)动态获取实体类的方法和值:
User user2 = new User("张三", "23", "0001");
getAllValue(user2,methodList,valueList);
public void getAllValue(Object obj, List<String> methodList, List valueList) {
    try {
        Class clazz = obj.getClass();
        Method[] declaredMethods = clazz.getDeclaredMethods();
        for (Method m : declaredMethods) {
            String name = m.getName();//方法名
            methodList.add(name);
            if(name.startsWith("get") && !name.equals("getClass")){
                Object value = m.invoke(obj, null);
                valueList.add(value);
            }
        }
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}
遍历:
for(int i = 0;i<methodList.size();i++){
    System.out.println("i=="+i+",="+methodList.get(i));
}
for(int i = 0;i<valueList.size();i++){
    System.out.println("i=="+i+",="+valueList.get(i));
}
结果:
i==0,=toString
i==1,=getId
i==2,=setUname
i==3,=getUname
i==4,=getAge
i==5,=setAge
i==6,=setId
i==0,=0001
i==1,=张三
i==2,=23
user类:
public class User {
    private String uname;
    private String age;
    private String id;
    public String address;
    public User() {
    }
    public User(String uname, String age, String id) {
        this.uname = uname;
        this.age = age;
        this.id = id;
    }
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return "User{" +
                "uname='" + uname + '\'' +
                ", age='" + age + '\'' +
                ", id='" + id + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
2.向User类的方法中加入数据:
public void setValue(String className){
    Object obj = null;
    try {
        Class clazz = Class.forName(className);
        obj = clazz.newInstance();
        Method[] methods = clazz.getDeclaredMethods();
        for (Method m : methods) {
            String name = m.getName();
            if(name.startsWith("set")){//获取所有的set开始的方法
                m.invoke(obj,"aaa");//并且将set方法的值都设为“aaa”
            }
        }
        System.out.println("i=="+((User)obj).toString());
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}
结果:
i==User{uname='aaa', age='aaa', id='aaa', address='null'}

转载地址:http://obfgi.baihongyu.com/

你可能感兴趣的文章
神经网络通俗指南:一文看懂神经网络工作原理
查看>>
Windows共享权限和相关管理
查看>>
页面制作HTML+CSS基础乱炖
查看>>
验证最小化可行产品(MVP)的15种方法
查看>>
JVM实用参数系列
查看>>
系统运维(灰度发布)
查看>>
几款强大的PPT制作辅助软件
查看>>
程序员应该常问常思考
查看>>
谈谈高并发系统的限流
查看>>
大数据计算框架与平台--深入浅出分析
查看>>
浅谈Windows共享网络热点开发
查看>>
前端代码日常收集与监控
查看>>
从url到页面展现,这之中发生了什么?
查看>>
Spring Boot + Mybatis + Redis二级缓存
查看>>
eclipse、myEclipse中svn的各种状态图标详解
查看>>
九种跨域方式实现原理(完整版)
查看>>
深入理解applicationContext.xml和dispatcherServlet-servlet.xml区别
查看>>
Redis GEO 的java实现(通过Jedis)(GIS相关)
查看>>
聊聊性能:全链路压测 overview
查看>>
Java+Maven+selenium+testng+reportng自动化测试框架(简易搭建说明)
查看>>