Как отобразить все доступные поля в два класса (без наследования) - PullRequest
0 голосов
/ 30 апреля 2019

Предположим, у меня есть два класса А и В,

класс А имеет много-много полей. класс B имеет несколько полей, все поля встречаются в классе A.

Можно ли автоматически сопоставлять доступные поля от объекта A до объекта B?

@ редактировать

class A {
    private int field1;
    private int field2;
    private int field3;
    private int field4;
    private int field5;
    private int field6;
    private int field7;

    // getters, setters
}

class B {
    private int field2;
    private int field6;

    // getters, setters
}

когда я возражаю против A и B, я хочу получить поля из A и поместить их в B. Но я не хочу использовать методы получения / установки, но автоматически

1 Ответ

0 голосов
/ 30 апреля 2019

Вы можете использовать отражение:

A a = new A();
B b = new B();

a.field1 = 1;
a.field2 = 3;

for (Field aField : a.getClass().getDeclaredFields()) {
    try {
        Field bCounterpart = b.getClass().getDeclaredField(aField.getName());
        if (bCounterpart.getType().equals(aField.getType())) { // Doesn't work well with autoboxing etc. The types have to explictly match
            bCounterpart.setAccessible(true); // Only for private fields
            aField.setAccessible(true); // Only for private fields
            bCounterpart.set(b, aField.get(a));
        }
    } catch (NoSuchFieldException e) {
        // B doesn't have the field
    }
}

System.out.println(b.field2); // 3
System.out.println(b.field6); // 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...