如何利用反射批量修改java类某一属性的代码详解

这篇文章主要介绍了如何利用反射批量修改java类某一属性,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

下面看下代码,具体代码如下所示:

package utils.copyProperty; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; public class copyProperty { public static PropertyDescriptor[] getPropertyDescriptor(Class> clz) throws Exception { PropertyDescriptor[] propertyDescriptorsFull = Introspector.getBeanInfo(clz).getPropertyDescriptors(); PropertyDescriptor[] ps = new PropertyDescriptor[propertyDescriptorsFull.length - 1]; int index = 0; for (PropertyDescriptor p : propertyDescriptorsFull) { if (!p.getName().equals("class")) { ps[index++] = p; } } return ps; } public static T setPropertyValue(T t,String propertyName,Object value){ try{ //获取属性描述类 PropertyDescriptor[] pdArr = getPropertyDescriptor(t.getClass()); PropertyDescriptor myPD = null; for (PropertyDescriptor p : pdArr) { //类属性与传入属性对比,为了统一都转小写 if(p.getName().toLowerCase().equals(propertyName.toLowerCase())){ //获取需要修改属性 myPD = p; break; } } //根据需要修改属性修改属性值 if(myPD!=null){ Method writeMethod = myPD.getWriteMethod(); if(myPD.getPropertyType().getName().equals("java.lang.String")) { writeMethod.invoke(t, value.toString()); }else{ writeMethod.invoke(t, value); } } }catch(Exception e){ e.printstacktrace(); } return t; } public static Collection setPropertyValue(Collection coll,String propertyName,Object value) { if(coll!=null) for(T t : coll){ setPropertyValue(t,propertyName,value); } return coll; } public static void main(String args[]) throws Exception{ ArrayList students=new ArrayList(); Student student=new Student(); Student student1=new Student(); students.add(student); students.add(student1); for (Student stu:students){ System.out.println("赋值之前:"+stu.getValidStatus()); }//修改validStatus为0 copyProperty.setPropertyValue(students, "validStatus", "0"); for (Student stu:students){ System.out.println("赋值之后:"+stu.getValidStatus()); } } public static class Student{ private String name ; private String sex; private String validStatus="1"; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getValidStatus() { return validStatus; } public void setValidStatus(String validStatus) { this.validStatus = validStatus; } } }

把student的validStatus状态都修改为0,测试效果如下:

到此这篇关于如何利用反射批量修改java类某一属性文章就介绍到这了,更多相关批量修改java类某一属性内容搜索编程之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程之家!

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...