这篇文章主要介绍了如何利用反射批量修改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类某一属性内容请搜索编程之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程之家!