精华内容
下载资源
问答
  • Java父子对象属性赋值问题:现有父类Father类,子类Son类继承于Father类,现要求将父类对象的属性值全部赋予给子类,如果通过子类对象.set(父类对象.get属性),那势必相当麻烦。 那么,有没有更加方便的API呢?...

    Java父子对象属性赋值问题:现有父类Father类,子类Son类继承于Father类,现要求将父类对象的属性值全部赋予给子类,如果通过子类对象.set(父类对象.get属性),那势必相当麻烦。

    那么,有没有更加方便的API呢?Spring提供了BeanUtils.copyProperties();可以实现该功能。

    父类Father类的属性如下:

    @Data
    class Father {
        private int hight;
    
        @Override
        public String toString() {
            return "{\"Father\":{" + "\"hight\":" + hight + "}}";
        }
    }

    子类Son类的属性如下:

    @Data
    class Son extends Father {
        private int weight;
    
        @Override
        public String toString() {
            return "{\"Son\":{" + "\"weight\":" + weight + "},\"super-Son\":" + super.toString() + "}";
        }
    }

    现创建父类对象并给该对象属性赋值,现在将父对象的属性拷贝给子类,错误的代码如下:

            Father father = new Father();
            father.setHight(180);
            //报ClassCastException异常
            Son son = (Son) father;
            son.setWeight(60);
            System.err.println(son.toString());

    运行程序,发现报错:类型转换异常!

    使用BeanUtils.copyProperties()实现代码如下:

    Father father = new Father();
    father.setHight(180);
    //报ClassCastException异常
    Son son = new Son();
    BeanUtils.copyProperties(father, son);
    son.setWeight(60);
    System.err.println(son.toString());

    执行代码发现父类对象的属性值已被复制到子类对象中,不需要set、get那么麻烦。

    注意:这是Spring提供的API,一定要在Spring环境中测试!

     

    展开全文
  • // 这里我只判断类型是String 和List的, 具体可根据对象属性类型去添加判断 if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名 Method m = dto.getClass()....
    private  static void setSendEmailDto(OrdOrderSendEmailDto dto){
        Field[] field = dto.getClass().getDeclaredFields();
        try{
            for (int i = 0; i < field.length; i++) {
                String  name = field[i].getName();
                name = name.substring(0, 1).toUpperCase() + name.substring(1);
                String type = field[i].getGenericType().toString();
                // 这里我只判断类型是String 和List的, 具体可根据对象属性类型去添加判断
                if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
                    Method m = dto.getClass().getMethod("get" + name);
                    String value = (String) m.invoke(dto); // 调用getter方法获取属性值
                    if (value == null) {
                        m = dto.getClass().getMethod("set"+name,String.class);
                        m.invoke(dto, "测试数据");
                    }
                }else if (type.equals("java.util.List<com.*.*.*.dto.OrdOrderDetailSendEmailDto>")){// 这里填写的是List对象的全路径
                    List<OrdOrderDetailSendEmailDto> list=new ArrayList<>();
                    OrdOrderDetailSendEmailDto emailDto=new OrdOrderDetailSendEmailDto();
                    Field[] fieldName = emailDto.getClass().getDeclaredFields();
                    for (int j = 0; j < fieldName.length; j++) {
                        String fieldNames = fieldName[j].getName();
                        fieldNames = fieldNames.substring(0, 1).toUpperCase() + fieldNames.substring(1);
                        String types = fieldName[j].getGenericType().toString();
                        if (types.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
                            Method method = emailDto.getClass().getMethod("get" + fieldNames);
                            String value = (String) method.invoke(emailDto); // 调用getter方法获取属性值
                            if (value == null) {
                                method = emailDto.getClass().getMethod("set"+fieldNames,String.class);
                                method.invoke(emailDto, "测试数据");
                            }
                        }
                    }
                    list.add(emailDto);
                    Method m = dto.getClass().getMethod("get" + name);
                    List value = (List) m.invoke(dto); // 调用getter方法获取属性值
                    if (value == null) {
                        m = dto.getClass().getMethod("set"+name,List.class);
                        m.invoke(dto, list);
                    }
                }
            }
        }catch (NoSuchMethodException e){
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        OrdOrderSendEmailDto dto=new OrdOrderSendEmailDto();
        setSendEmailDto(dto);
    }

    打印结果

    展开全文
  • 使用BeanUtils.copyProperties进行对象之间的属性赋值

    万次阅读 多人点赞 2019-05-15 19:07:27
    1、使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性赋值,避免通过get、set方法一个一个属性赋值 /** * 对象属性拷贝 <br> * 将源对象属性拷贝到目标对象 * * @...

    1、使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值

    /**
         * 对象属性拷贝 <br>
         * 将源对象的属性拷贝到目标对象
         *
         * @param source 源对象
         * @param target 目标对象
         */
        public static void copyProperties(Object source, Object target) {
            try {
                BeanUtils.copyProperties(source, target);
            } catch (BeansException e) {
                LOGGER.error("BeanUtil property copy  failed :BeansException", e);
            } catch (Exception e) {
                LOGGER.error("BeanUtil property copy failed:Exception", e);
            }
        }

    2、List集合之间的对象属性赋值

    /**
         * @param input 输入集合
         * @param clzz  输出集合类型
         * @param <E>   输入集合类型
         * @param <T>   输出集合类型
         * @return 返回集合
         */
        public static <E, T> List<T> convertList2List(List<E> input, Class<T> clzz) {
            List<T> output = Lists.newArrayList();
            if (CollectionUtils.isNotEmpty(input)) {
                for (E source : input) {
                    T target = BeanUtils.instantiate(clzz);
                    BeanUtil.copyProperties(source, target);
                    output.add(target);
                }
            }
            return output;
        }

    比如有两个类,User和Employee,将存储Employee对象的List赋给存储User对象的List。

    User类:

    public class User {
        private String name;
        private Integer age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }

    Employee类:

    public class Employee {
        private String name;
    
        private Integer age;
        private String dept;
    
        public Employee(String name, Integer age, String dept) {
            this.name = name;
            this.age = age;
            this.dept = dept;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getDept() {
            return dept;
        }
    
        public void setDept(String dept) {
            this.dept = dept;
        }
    
        @Override
        public String toString() {
            return "Employee{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", dept='" + dept + '\'' +
                    '}';
        }
    }

    测试类:

    @RunWith(PowerMockRunner.class)
    public class TestUtil
    {
        @Test
        public void test(){
            Employee ee1=new Employee("A",21,"it");
            Employee ee2=new Employee("B",23,"account");
            User user=new User();
            BeanUtil.copyProperties(ee1, user);
            System.out.println(user);
            System.out.println("-------------分割线--------------");
            List<User> output=new ArrayList<>();
            List<Employee> source= Arrays.asList(ee1,ee2);
            output=BeanUtil.convertList2List(source,User.class);
            for (User str:output) {
                System.out.println(str);
            }
        }
    }

    展开全文
  • 注解实现对象属性赋值

    千次阅读 2019-11-22 11:57:17
    在做一些业务时,从前台获取的数据用实体接收后,可能需要有字段转换才能存储到库中,或...可实现两个对象之间属性的转换,但此种方式仅仅支持完全相同字段名和字段类型的字段赋值;另外有第三方工具dozer,使用doze...

    在做一些业务时,从前台获取的数据用实体接收后,可能需要有字段转换才能存储到库中,或从库中查找的数据,会做一些转换或处理再返回给前台视图view。
    有一个简单的BeanUtils.copyProperties(source, target, ignoreProperties);可实现两个对象之间属性的转换,但此种方式仅仅支持完全相同字段名和字段类型的字段赋值;另外有第三方工具dozer,使用dozer工具,这个需要xml配合或需要继承DozerConverter接口处理,也挺恼人。
    对于系统中多处需要字段换值的处理,以下提供一种注解的方式。
    项目代码:https://github.com/alranger/dataconverter

    另外SOA代码:https://github.com/genie-arct/soa
    注解:

    /**
     * 用于字段赋值的处理
     * 目前:source与target不共存,先判断source,有source则不处理target
     */
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.FIELD)
    public @interface ConverterField {
    
        /**
         * 主要用于处理字段名相同,类型不同的数据
         *  字段类型(最直接的类型)
         *  example:
         *  1、 @ConverterField(target = BasicUser.class)
         *      private List<BasicUser> leaders;
         *  2、 @ConverterField(target = BriefVO.class)
         *      private BriefVO type;
         */
        Class<?> target();
    
        /**
         * 用于处理数据拼接,获取对象字段用"." 分割,如entity.name
         * 数据来源
         * 当注解有source时; target= Target.class 是默认空值
         * @return
         */
        String[] source() default {};
    
        /**
         * 数据的来源对象,目前用于source()数据处理, field的值可以来自于自身的entity
         * @return
         */
        OriginType origin() default OriginType.OPPOSITE;
    
    }


    以下用例子说明:
    一、两个对象中字段名相同,类型不同的用法:
    1、字符串转对象或List
    源对象source:
    源对象中的两个字段的,是获取的数据字典数据dict,修改的频率不多,但涉及到查询,没有用AttributeConverter去处理,而是自己处理成json串存储为string

    在这里插入图片描述

    目标对象target:
    为了给前端提供更友好的数据,转换为实体的或List<?>,
    注解的使用:

    在这里插入图片描述

    这里没有转化为数据字典(dict),而是使用了一个简化的entity,只返回最关注的信息,使用了一个简化的BriefVO。

    在这里插入图片描述

    结果:

    在这里插入图片描述
    2、entity之间的转换:

    源对象source:

    在这里插入图片描述

    目标对象target:

    Stage与BriefvO的属性是完全不同的,

    在这里插入图片描述

    结果:

    在这里插入图片描述

    二、字段的拼接
    有时返回的数据仅仅只是其中一个对象的属性字段值,也可以通过注解的方式来实现:
    源source:

    在这里插入图片描述

    目标target:

    在这里插入图片描述

    结果:

    在这里插入图片描述

    三、后面有时间会加上关于数字的计算和日期的计算或处理等,待续

    在公众号 “架构师修炼” 菜单可获得专属java架构视频资料,更多java、python、人工智能、小程序、大前端等可看菜单,无私奉献

    关于架构师修炼

    本号旨在分享一线互联网各种技术架构解决方案,分布式以及高并发等相关专题,同时会将作者的学习总结进行整理并分享。

     

    展开全文
  • C# List 循环对象 并给属性赋值

    千次阅读 2020-06-15 14:26:29
  • 批量给list所有对象同一属性赋值

    千次阅读 2020-11-24 13:47:06
  • 问题描述:在一个泛型方法中,实例化一个泛型对象后,利用反射获取该泛型中的所有属性,再给该对象的这些属性赋值,打断点发现,泛型对象被实例化出来了,没有问题;所要赋值的属性值也没有问题,但调用Property....
  • SpringIOC容器:对象属性赋值示例对象public class User { private int id; private String name; // list集合 private List&lt;String&gt; list; // Map集合 private Map&lt;String,Object&...
  • 下面小编就为大家带来一篇MyBatis拦截器:给参数对象属性赋值的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 1.将一个对象属性值复制给另一个对象 BeanUtils.copyProperties(productInfo,productInfoVO); 2.jdk1.8特性 获取类目type列表 //获取某一属性集合 List<Integer> categoryTypeList = productInfoList....
  • yml文件向对象中的属性赋值

    千次阅读 2020-05-09 10:53:37
    yml文件赋值 ... ...2:添加get set toString方法 3:使用@ConfigurationProperties(prefix = ""):通过application.yml自动注入...//通过application.yml文件赋值 属性和配置文件的key要一致 @ConfigurationProperties
  • 为什么要使用yaml给对象属性赋值2.实践3.扩展 1.为什么要使用yaml给对象属性赋值 yaml可以直接给实体类的属性赋值 原来我们学习的给实体类赋值的方式有两种:①调用有参构造 ②使用注解@value 上面两种方式都可以...
  • 小程序--给对象属性赋值

    千次阅读 2019-09-26 20:45:23
    小程序中更改data里面的... list: { title: '我是标题哦' } } 1、需求:更改tel的值 操作如下: this.setData({ tel: 15188888888 }) 2、需求:更改list里title的值; 操作如下: let value = 'list.title'; ...
  • MyBatis级联一个对象属性赋值

    千次阅读 2018-12-26 14:23:52
    两个pojo类如下: ... ...使用第一种写法时,自身的属性可以省略不写,使用association时,不仅级联首先要写,自身属性也必须得写 使用association时,一定要写javaType,否则出现空指针异常
  • 小程序 - setData给对象属性赋值

    千次阅读 2019-09-18 06:37:47
    /* * listobj : {list: [ {orderActivityStatusName: ‘信息信心’, orderActivityStatus: 15}, {orderActivityStatusName: ‘信息反倒是’, orderActivitySta...
  • 对象的集合属性赋值的两种方法

    千次阅读 2020-03-10 12:19:37
    public class Student { private String name; private int age; private Collection books = new ArrayList...//学生的集合属性,里面可以有若干值 public Student(String name, int age, Collection books) ...
  • 通过反射机制调用对象的某个方法 -- 将一个对象属性赋值给另一个对象属性开发环境创建对象UserOne、UserTwo编写基于反射的工具类测试结果预留占位 模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于...
  • C# - var 匿名对象属性赋值与取值

    千次阅读 2019-06-26 19:21:51
    C# - 匿名对象属性赋值与取值 在new出匿名对象的函数内可以直接调用该匿名对象属性取值。 可是在其它函数就无法调用匿名对象属性或方法。 这时,我们可以通过c#的反射机制取值: 文章出处:...
  • 如何利用反射为对象属性赋值 其实通篇都看下来的小伙伴,脑子里肯定是已经有思路了。 1.获取字节码对象 2.利用对象的字节码对象获取对象中的属性。 3.直接给属性赋值,或者获取属性对应的set方法为属性赋值。 ...
  • 1.将Java对象转换成Map的键值对形式 上代码 /** * 获取利用反射获取类里面的值和名称 * * @param obj * @return * @throws IllegalAccessException */ public static Map<String, Object> object...
  • spring的集合属性赋值

    千次阅读 2018-01-29 19:53:16
    List集合属性赋值 Xml配置 集合属性赋值 -->  bean id="collectionProperty" class="cn.itcast.spring.demo8.CollectionProperty">  property name="list">  list>  value>abcvalue>
  • import org.springframework.beans.BeanUtils; import org.springframework.util.CollectionUtils...import java.util.List; import java.util.stream.Collectors; public class TransferUtil { /** * bean转为另.
  • 2、但是修改数组或者对象中的一个属性值的写法就不能直接写。否则会报错。 使用“[ ]”符号可以很好的解决这个问题。 下面贴上代码 onCheckChange(event) { var index = event.currentTarget....
  • 在C#中,类中定义的list需要初始化,不然就会报空。 在调试的时候发现,编辑器的解释为...问题:new一个新的对象,调用对象中的list进行赋值,一直报错list为空! 解决:对象中的list需要初始化,= new一个list。 ...
  • 属性赋值与MybatisPlus

    2020-07-23 22:16:19
    1.属性赋值 用户的数据被写死.如果后续需要修改数据,则必须修改代码.属性的耦合性高.不方便维护. 利用配置文件动态的为属性赋值. 目的:动态配置属性信息. 方式2: 取值前提: 先赋值,再取值 1.@value spel表达式 2@...
  • 逻辑流中用赋值图元给DataObject对象新增属性赋值,报错:Caused by: com.primeton.ext.data.common.ValueConvertException: the object class is 'java.util.HashMap' , so cannot convert the object to Data...
  • java动态给对象添加属性赋值

    万次阅读 2019-04-18 22:00:43
    * 给bean属性赋值 * * @param property 属性名 * @param value 值 */ public void setValue(Object property, Object value) { beanMap.put(property, value); } /** * 通过属性名得到属性值 * * @...
  • 然后数据却不是一个对象中的属性或字段,这个时候我们为了方便数据传输一般都会将多个对象中的属性封装到一个VO中,使用Hibernate的人应该知道,查询出来一般都是一个或多个对象,如果依次通过setter方法来赋值的话...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 193,475
精华内容 77,390
关键字:

对象的list属性赋值