Java中,循环对bean的属性进行赋值

更新时间:2023-07-15 12:55:57 阅读: 评论:0

Java中,循环对bean的属性进⾏赋值
项⽬背景
我们开发过程中会碰到这样⼀类问题,就是数据层或三⽅接⼝返回的Bean对象需要转换重新装换⼀下我们需要的对象。我们通常的做法就是通过getter/tter⽅法进⾏⼀个⼀个进⾏赋值,这样的话书写起来太复杂了,并且太重复了。我尝试写了⼀个⼯具类,能够对各种场景下的对象进⾏相互赋值。
功能介绍
可以为将要赋值的对象进⾏单个单个的按顺序赋值
通过传递的属性的index(就是他是第⼏个属性)获取本属性的值
返回对象中属性的数量
两个对象之间相互拷贝属性值
传递⼀个list,遍历bean进⾏赋值
传递⼀个数组,对对象进⾏赋值
返回⼀个对象的属性值集合
返回⼀个对象的属性值数组
注意注意注意
getDeclaredFields⽅法不能保证字段声明的顺序进⾏返回,但是基本上会按照这个顺序的。所以以下的⽅法是建⽴在返回正确的顺序上的基础上的,但是两个对象相互拷贝是没有问题的。
import flect.Field;
import java.util.ArrayList;
import java.util.List;
/**
* @author haoyan.shi
* 想设计⼀个能够解析⼀个bean的全部属性并按照顺序进⾏遍历
*/
public class ObjectUtils {
/**
* 按照属性的顺序赋值。可接受null,但是不能跳过某个属性进⾏赋值。就是说就算
* 有⼀个值为空,那你也要传递进⾏null
*
* @param target
* @param value
* @param <E>
* @return
*/
public static<E> E forEachSetValue(E target, Object value){
if(target == null){
return target;
}
List<Field> fields =new ArrayList<>();
try{
// 1.解析出所有的属性
Field[] declaredFields = Class().getDeclaredFields();
for(Field declaredField : declaredFields){
declaredField.tAccessible(true);
fields.add(declaredField);
}
/
/ 2.把每个属性放⼊⼀个集合中
if(fields.size()<=0){
return target;
}
(0).get(target)!= null){
}
Field field = (0);
field.t(target, value);
}catch(Exception exception){
exception.printStackTrace();
}
return target;
}
/**
* 本⽅法为了遍历索引进⾏赋值
*
* @param e
* @param index
环境手抄报* @return
*/
public static Object forEachGetValue(Object e,int index){
try{
Field[] declaredFields = e.getClass().getDeclaredFields();
for(Field declaredField : declaredFields){
declaredField.tAccessible(true);
}
return declaredFields[index].get(e);
}catch(IllegalAccessException illegalAccessException){
illegalAccessException.printStackTrace();
}
return e;
}
public static int size(Object o){
if(o == null){
return0;
}
Field[] declaredFields = o.getClass().getDeclaredFields();
return declaredFields.length;
}
/**
图书馆英语怎么读* 本⽅法是为了把已经有值得对象中属性名相同的名属性赋值到没有值得对象⽤。    *
* @param target
* @param value
*/
public static<E> E copyValueFromObject(E target, Object value){
if(target == null || value == null){
return null;
}
Field[] vs = Class().getDeclaredFields();
Field[] ts = Class().getDeclaredFields();
try{
for(int i =0; i < vs.length; i++){
for(int j =0; j < ts.length; j++){
if(vs[i].getName().equals(ts[j])){
ts[j].t(target, vs[i].get(value));
}
}
}
}catch(Exception e){
e.printStackTrace();
}
return target;
}
/**
* 这个⽅法能把list中的值按照顺序设置到⽬标对象中
* 这个⽅法能把list中的值按照顺序设置到⽬标对象中
*
* @param target
* @param value
* @param <E>
* @return
*/
public static<E> E forEachSetValueFromList(E target, List value){
if(target == null || value == null || value.size()==0){
return target;北京早餐
}
Field[] ts = Class().getDeclaredFields();
try{
for(int i =0; i < ts.length; i++){
巯基乙胺ts[i].t(target, (i));
}
}catch(Exception e){
e.printStackTrace();模棱两可
}
return target;
}
/
**
* 从数组中进⾏设置值
*
* @param target
* @param value红叶生菜
* @param <E>
* @return
*/
public static<E> E forEachSetValueFromArray(E target, Object[] value){ if(target == null || value == null || value.length ==0){
return target;
}
Field[] ts = Class().getDeclaredFields();
try{
for(int i =0; i < ts.length; i++){
ts[i].t(target, value[i]);
}
}catch(Exception e){
e.printStackTrace();
}
return target;
}
public static Object[]getArrayValue(Object o){
我不会喜欢你
Field[] declaredFields = o.getClass().getDeclaredFields();
Object[] result =new Object[declaredFields.length];
try{
for(int i =0; i < declaredFields.length; i++){
result[i]= declaredFields[i].get(o);
}
}catch(Exception e){
e.printStackTrace();
}
北京供暖return result;
}
public static List getListValue(Object o){
Field[] declaredFields = o.getClass().getDeclaredFields();
List result =new ArrayList(declaredFields.length);
try{
for(int i =0; i < declaredFields.length; i++){
result.add(declaredFields[i].get(o));
}
}
}catch(Exception e){
e.printStackTrace();
}
return result;
}
}
后期扩展:
1.我们可以定义⼀些注解,进⾏属性匹配。注⼊值更精确。
2.还可以⽤jdk1.8中的函数接⼝,进⾏赋值。
3.甚⾄都可以作为jdk的新特性去扩展这个功能。

本文发布于:2023-07-15 12:55:57,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1082421.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:属性   对象   赋值   顺序   返回   特性   北京
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图