iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java循环对bean的属性进行赋值的实现
  • 392
分享到

Java循环对bean的属性进行赋值的实现

2024-04-02 19:04:59 392人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

项目背景 我们开发过程中会碰到这样一类问题,就是数据层或三方接口返回的Bean对象需要转换重新装换一下我们需要的对象。我们通常的做法就是通过getter/setter方法进行一个一

项目背景

我们开发过程中会碰到这样一类问题,就是数据层或三方接口返回的Bean对象需要转换重新装换一下我们需要的对象。我们通常的做法就是通过getter/setter方法进行一个一个进行赋值,这样的话书写起来太复杂了,并且太重复了。我尝试写了一个工具类,能够对各种场景下的对象进行相互赋值。

功能介绍

  • 可以为将要赋值的对象进行单个单个的按顺序赋值
  • 通过传递的属性的index(就是他是第几个属性)获取本属性的值
  • 返回对象中属性的数量
  • 两个对象之间相互拷贝属性值
  • 传递一个list,遍历bean进行赋值
  • 传递一个数组,对对象进行赋值
  • 返回一个对象的属性值集合
  • 返回一个对象的属性值数组

注意注意注意!!!

getDeclaredFields方法不能保证字段声明的顺序进行返回,但是基本上会按照这个顺序的。所以以下的方法是建立在返回正确的顺序上的基础上的,但是两个对象相互拷贝是没有问题的。


import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;


public class ObjectUtils {

    
    public static <E> E forEachSetValue(E target, Object value) {
        if (target == null) {
            return target;
        }
        List<Field> fields = new ArrayList<>();
        try {
            // 1.解析出所有的属性
            Field[] declaredFields = target.getClass().getDeclaredFields();
            for (Field declaredField : declaredFields) {
                declaredField.setAccessible(true);
                fields.add(declaredField);
            }
            // 2.把每个属性放入一个集合中
            if (fields.size() <= 0) {
                return target;
            }
            while (fields.get(0).get(target) != null) {
                fields.remove(0);
            }
            Field field = fields.get(0);
            field.set(target, value);
            fields.remove(0);
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return target;
    }

    
    public static Object forEachGetValue(Object e, int index) {
        try {
            Field[] declaredFields = e.getClass().getDeclaredFields();
            for (Field declaredField : declaredFields) {
                declaredField.setAccessible(true);
            }
            return declaredFields[index].get(e);
        } catch (IllegalAccessException illegalAccessException) {
            illegalAccessException.printStackTrace();
        }
        return e;
    }

    public static int size(Object o) {
        if (o == null) {
            return 0;
        }
        Field[] declaredFields = o.getClass().getDeclaredFields();
        return declaredFields.length;
    }

    
    public static <E> E copyValueFromObject(E target, Object value) {
        if (target == null || value == null) {
            return null;
        }
        Field[] vs = target.getClass().getDeclaredFields();
        Field[] ts = value.getClass().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].set(target, vs[i].get(value));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return target;
    }

    
    public static <E> E forEachSetValueFromList(E target, List value) {

        if (target == null || value == null || value.size() == 0) {
            return target;
        }
        Field[] ts = target.getClass().getDeclaredFields();
        try {
            for (int i = 0; i < ts.length; i++) {
                ts[i].set(target, value.get(i));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return target;
    }

    
    public static <E> E forEachSetValueFromArray(E target, Object[] value) {

        if (target == null || value == null || value.length == 0) {
            return target;
        }
        Field[] ts = target.getClass().getDeclaredFields();
        try {
            for (int i = 0; i < ts.length; i++) {
                ts[i].set(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的新特性去扩展这个功能。

到此这篇关于Java循环对bean的属性进行赋值的文章就介绍到这了,更多相关Javabean属性赋值内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java循环对bean的属性进行赋值的实现

本文链接: https://www.lsjlt.com/news/133198.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java循环对bean的属性进行赋值的实现
    项目背景 我们开发过程中会碰到这样一类问题,就是数据层或三方接口返回的Bean对象需要转换重新装换一下我们需要的对象。我们通常的做法就是通过getter/setter方法进行一个一...
    99+
    2024-04-02
  • java反射给对象属性赋值怎么实现
    Java反射可以通过`java.lang.reflect.Field`类来给对象的属性赋值。以下是一个示例代码: import ja...
    99+
    2023-10-27
    java
  • java中给实体对象属性的空值赋默认值
    目录给实体对象属性的空值赋默认值给实体类赋默认值通用方法给实体对象属性的空值赋默认值 private final String defaultStr = ""; private fi...
    99+
    2024-04-02
  • Spring中如何使用@Value注解实现给Bean属性赋值
    目录属性赋值@Value注解的定义:测试1.在添加了Spring依赖的Maven项目中创建2.在resources目录下创建一个配置文件person.properties3.创建配置...
    99+
    2024-04-02
  • java 对象List中对象的某一属性重新赋值
    描述: 在我们开发过程中经常会遇到在拿到一个对象list集合的时候回对某一个字段重新赋值,比如:在无任务下面的若干子任务,开始执行主任务对子任务的状态统一设置待执行。这个时候就需要使用 Java8 s...
    99+
    2023-09-01
    java
  • java如何给类的属性赋值
    在Java中,可以通过以下几种方式给类的属性赋值:1. 在类的构造方法中赋值:在类的构造方法中可以直接给属性赋初始值。例如:```j...
    99+
    2023-09-11
    java
  • jquery如何循环对象的属性
    在前端开发中,我们常常需要遍历对象的属性,并对其进行某些操作,以实现动态性的效果。而jquery是广泛应用于前端开发的一个JavaScript库,它提供了很多方便实用的方法。本文将讲述如何使用jquery循环对象的属性,并分享一些常用的方法...
    99+
    2023-05-23
  • 利用@Value注解为bean的属性赋值方法总结
    目录1.@Value注解2.@Value注解的用法2.1.不通过配置文件注入属性的情况2.2.通过配置文件注入属性的情况2.3.@Value中#{··&m...
    99+
    2023-05-19
    @Value注解为bean的属性赋值 @Value为bean属性赋值 @Value bean
  • angularjs循环对象属性如何实现动态列
    小编给大家分享一下angularjs循环对象属性如何实现动态列,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!angularjs循环对象属性实现动态列优点:保存对象...
    99+
    2023-06-25
  • java数组循环赋值的方法是什么
    在Java中,可以使用循环结构(如for循环或while循环)来循环遍历数组,并为数组的每个元素赋值。以下是一个使用for循环为数组...
    99+
    2023-09-23
    java
  • Java基础将Bean属性值放入Map中的实例
    Java基础将Bean属性值放入Map中的实例利用发射将Java对象的属性值以属性名称为键,存储到Map中的简单实现。包括自身属性及从父类继承得到的属性。Java类型的getField[s]方法只能获取public 类型的属性,getDec...
    99+
    2023-05-31
    java bean map
  • angularjs循环对象属性实现动态列的思路详解
    angularjs循环对象属性实现动态列 优点:保存对象,在数据库只保存一条数据 缺点:添加对象属性需要修改表结构、代码,然后重新重新发布 实现思路 1)数据库创建表(对象)、创建字...
    99+
    2024-04-02
  • java 面向对象代码块及不同位置对属性赋值的执行顺序
    目录代码块对属性可以赋值的位置不同位置对属性赋值的执行顺序结语前言: java中的代码块介绍以及一个类中不同位置对属性赋值的执行顺序。 代码块 1.代码块的作用:用来初始化类、对象2...
    99+
    2024-04-02
  • java使用反射给对象属性赋值的两种方法
    目录前言方法1:这里使用了Field的set方的 Field 属性,然后设置可见性,然后设置了一个值,最后打印方法2:使用invoke方法总结:前言 最近项目中遇到一个问题,就是能实...
    99+
    2023-05-14
    java用反射给属性赋值 java反射设置属性的值 java 反射属性
  • vue中v-for循环对象中的属性
    目录1、循环对象内的值2、循环对像3、循环键和值1、循环对象内的值 <body> <div id="app"> <!...
    99+
    2024-04-02
  • MyBatis拦截器:给参数对象属性赋值的实例
    该拦截器的作用:在进行增加、修改等操作时,给数据模型的一些通用操作属性(如:创建人、创建时间、修改人、修改时间等)自动赋值。该实现是在DAO层拦截,即存入DB前最后一层。后经分析,不是很合理,改为在service层拦截,用spring AO...
    99+
    2023-05-31
    mybatis 拦截器 参数
  • java foreach循环为什么不能赋值的讲解
    foreach循环为什么不能赋值 直接上代码 public class test4 { public static void main(String args[]){ ...
    99+
    2024-04-02
  • 浅谈vue中computed属性对data属性赋值为undefined的原因
    目录场景:原因:_init中初始化_init中做了什么?在initState()做了这些事情解决办法 :场景: 我在computed中return了一个值,然后在data中直接将它复...
    99+
    2024-04-02
  • Java for循环和foreach循环的性能对比分析
    目录for循环和foreach循环的性能对比普通for循环语法foreach 循环语法for与foreach循环效率比较对于数组来说对于链表来说小结一下吧for循环和foreach循...
    99+
    2024-04-02
  • PHP对数组进行循环的方法
    小编给大家分享一下PHP对数组进行循环的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.利用for循环<php   &n...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作