概述
在开发中使用反射获取类的属性,然后做其他的操作,使用getFields()获取的时候没有任何的值,查询了一下自己以前的代码,发现getDeclaredFields(),区别如下:
相同点 :getFields()方法和getDeclaredFields()方法都是获取类的属性;
不通点:getField()是获取的类的public声明的属性,包括集成而来的public修饰的属性;
getDeclaredFields()获取的是当前类声明的所有属性,包括private ,protect,public 修改的类,但是不包括集成自父类的属性
public static class A{
public String name;
private Integer age;
}
public static class B{
public String name;
public Integer age;
}
public static void main(String[] args) throws IllegalAccessException {
A a =new A();
a.name="小明";
a.age =20;
B b = new B();
b.name="小红";
Field[] fields = a.getClass().getDeclaredFields();
Field[] bf = b.getClass().getDeclaredFields();
for(Field aa: fields) {
for(Field bb: bf){
//--getName是比较属性名是否相同
if(aa.getName().equals(bb.getName())){
System.out.println("aa的属性名: "+aa.getName());
System.out.println("bb的属性名: "+bb.getName());
//此方法设置为true则aa类的私有属性也可以获取
aa.setAccessible(true);
bb.set(b, aa.get(a));
}
}
}
System.out.println("b的name值: "+b.name +" "+"b的age值: "+b.age);
}
}
打印结果:
aa的属性名: name
bb的属性名: name
aa的属性名: age
bb的属性名: age
b的name值: 小明 b的age值: 20
从上面的例子可以看到可以通过类的反射间接给类的属性赋予值
应用场景:往表里插入数据,如果这个表字段非常的多几十个上百个字段,一个一个字段去插写代码都烦死,此时就可以通过反射表的类,通过此方法实现表数据插入
最后
以上就是文艺钢笔为你收集整理的通过反射获取类的属性并赋予属性值方法的全部内容,希望文章能够帮你解决通过反射获取类的属性并赋予属性值方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复