微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐