• Bean属性复制,字段名可不同,字段类型不同需要自行处理


    @Setter
    @Getter
    public class SourceA {
    
        private String name;
        private String text;
    
        public SourceA(String name, String text) {
            this.name = name;
            this.text = text;
        }
    }
    @Setter
    @Getter
    @ToString
    public class TargetB {
    @FieldMap(name
    = "name") public LocalDateTime n; private String text; }

    注解字段名

    @Target({ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface FieldMap {
        String name() default "";
    }

    实现,如果字段类型相同可以赋值,但是可能会有不同的时候。

    public static void copy(Object source, Object target) throws Exception {
            Class<?> sourceClass = source.getClass();
            Class<?> bClass = target.getClass();
    
            Field[] soutceFields = sourceClass.getDeclaredFields();
            Map<String, Object> sourceMap = new HashMap<>();
            for (Field field : soutceFields) {
                field.setAccessible(true);
                sourceMap.put(field.getName(), field.get(source));
            }
    
            Field[] targetFields = bClass.getDeclaredFields();
            for (Field field : targetFields) {
                field.setAccessible(true);
                FieldMap annotation = field.getAnnotation(FieldMap.class);
                if (annotation != null) {
                    String name = annotation.name();
                    Object sourceValue = sourceMap.get(name);
                    if (field.getType() == sourceClass.getDeclaredField(name).getType()) {
                        field.set(target, sourceValue);
                    } else {
                        /**
                         * 比如source的date字段类型为String,target接收date字段的类型为LocalDateTime
                         */
                    }
                    continue;
                }
                field.set(target, sourceMap.get(field.getName()));
            }
    
        }
  • 相关阅读:
    JavaScript 类型转换
    Bjarne Stroustrup
    格拉丘纳斯的上下级关系理论
    成功者必须具备的三大技能
    ASP.NET/Perl.NET (转)
    iPhone/Mac ObjectiveC内存管理教程和原理剖析
    objectivec日期之间比较可用以下方法
    Centos下安装中文输入法
    C#中数字的四舍五入与只取整
    关于Application.Lock和Lock(obj)
  • 原文地址:https://www.cnblogs.com/nmnm/p/11363072.html
Copyright © 2020-2023  润新知