普通注册 - 普通登录
开源之家-免费素材_软件_模板_源码下载-更快的站长下载站

开源之家-免费素材_软件_模板_源码下载-更快的站长下载站

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

时间:2020-07-25 20:37 [[其它教程]] 作者:转载 浏览:

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

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> 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 <T>Collection<T> setPropertyValue(Collection<T> 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<Student> 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类某一属性的代码详解

本文永久链接地址: https://www.enboo.cn/CMSjiaocheng/qitajiaocheng/20794.html

文本标签:Java

郑重声明:
本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
如无法链接失效或侵犯版权,请给我们来信:2225329841@qq.com