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

 更新时间:2020年07月25日 15:34:02   作者:心寒丶  
这篇文章主要介绍了如何利用反射批量修改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> 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类某一属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot WebService服务端&客户端使用案例教程

    SpringBoot WebService服务端&客户端使用案例教程

    这篇文章主要介绍了SpringBoot WebService服务端&客户端使用案例教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-10-10
  • Idea2022版本配置SpringBoot热部署的教程

    Idea2022版本配置SpringBoot热部署的教程

    这篇文章主要介绍了Idea2022版本配置SpringBoot热部署的教程,包括添加依赖及更改IDEA设置的方法,本文图文实例相结合给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Seata AT模式TransactionHook被删除探究

    Seata AT模式TransactionHook被删除探究

    这篇文章主要为大家介绍了Seata AT模式TransactionHook被删除探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Java抽象类和接口的区别详情

    Java抽象类和接口的区别详情

    这篇文章主要介绍的是Java抽象类和接口的区别详情,
    2021-11-11
  • 详解Java的Struts框架中上传文件和客户端验证的实现

    详解Java的Struts框架中上传文件和客户端验证的实现

    这篇文章主要介绍了Java的Struts框架中上传文件和客户端验证的实现,Struts是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • SpringBoot+Vue实现数据添加功能

    SpringBoot+Vue实现数据添加功能

    这篇文章主要介绍了SpringBoot+Vue实现数据添加功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • JAVA简单实现MD5注册登录加密实例代码

    JAVA简单实现MD5注册登录加密实例代码

    本篇文章主要介绍了JAVA简单实现MD5注册登录加密实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • java仿windows记事本功能完整版

    java仿windows记事本功能完整版

    这篇文章主要为大家详细介绍了java仿windows记事本功能完整版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • SpringBoot接收参数的8种方式示例详解

    SpringBoot接收参数的8种方式示例详解

    这篇文章主要介绍了SpringBoot接收参数的8种方式,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • ArrayList与linkedList的用法区别及扩容方式

    ArrayList与linkedList的用法区别及扩容方式

    这篇文章主要介绍了ArrayList与linkedList的用法区别及扩容方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论