zoukankan      html  css  js  c++  java
  • 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()));
            }
    
        }
  • 相关阅读:
    Java Object part1
    StringBuffer StringBuilder append
    Java equal
    java Classloader
    Java NIO
    Oracle中Blob和Clob
    Java8 Lambda 表达式
    HashMap分析 + 哈希表
    android自定义控件之滚动广告条
    android自定义控件之模仿优酷菜单
  • 原文地址:https://www.cnblogs.com/nmnm/p/11363072.html
Copyright © 2011-2022 走看看