FieldsCompare.java 2.43 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
package pwc.taxtech.atms;

import java.lang.reflect.Field;

public class FieldsCompare {
    public static <S, D> void map(S source, D dest) throws ClassNotFoundException, IllegalAccessException {
        Class destClass = Class.forName(dest.getClass().getName());
        Class clsSource = Class.forName(source.getClass().getName());

        Field[] declaredFields = destClass.getDeclaredFields();
        Field[] clsFields = clsSource.getDeclaredFields();
        System.out.println(destClass.getName());
        System.out.println();
        System.out.println(clsSource.getName());
        System.out.println(clsFields.toString());

        System.out.println(clsSource.getName() + ":" + clsFields.length);
        System.out.println(destClass.getName() + ":" + declaredFields.length);

        Field[] fieldsMax = null;
        Field[] fieldsMin = null;
        Class fieldsMaxClass = null;
        Class fieldsMinClass = null;
        if (declaredFields.length > clsFields.length) {
            fieldsMax = declaredFields;
            fieldsMin = clsFields;

            fieldsMaxClass = destClass;
            fieldsMinClass = clsSource;
        } else {
            fieldsMax = clsFields;
            fieldsMaxClass = clsSource;

            fieldsMin = declaredFields;
            fieldsMinClass = destClass;
        }

        for (Field field : fieldsMax) {
            field.setAccessible(true);
            String fieldName = field.getName();
            try {
                if ("serialVersionUId".equals(fieldName)) {
                    continue;
                }
                fieldsMinClass.getDeclaredField(fieldName);

            } catch (NoSuchFieldException e) {
                System.out.println("NoSuchFieldException " + fieldsMinClass.getName() + "." + fieldName);
            }
        }

        for (Field field : fieldsMin) {
            field.setAccessible(true);
            String fieldName = field.getName();
            try {
                if ("serialVersionUId".equals(fieldName)) {
                    continue;
                }
                fieldsMaxClass.getDeclaredField(fieldName);

            } catch (NoSuchFieldException e) {
                System.out.println("NoSuchFieldException " + fieldsMaxClass.getName() + "." + fieldName);
            }
        }
    }

    public static void main(String[] args) throws IllegalAccessException, ClassNotFoundException {
//        map(new CompanyBalanceDto(), new CompanyBalance());
    }
}