У нас есть POJO, который автоматически генерируется с ~ 60 свойствами. Это генерируется с Avro 1.4, который не включает в себя геттеры / сеттеры.
Для библиотеки, которую мы используем для обеспечения простых преобразований между объектами, для правильной работы требуются методы, подобные методам получения / установки.
Есть ли способ реплицировать геттеры / сеттеры без необходимости вручную переопределять POJO и создавать все геттеры / сеттеры вручную?
public class BigGeneratedPojo {
public String firstField;
public int secondField;
...
public ComplexObject nthField;
}
public class OtherObject {
private String reprOfFirstFieldFromOtherObject;
private ComplexObject reprOfFirstFieldFromOtherObject;
public String getReprOfFirstFieldFromOtherObject() { ... standard impl ... };
public void setReprOfFirstFieldFromOtherObject() { ... standard impl ... };
}
Желание написать код, который выглядит так:
Mapper<BigGeneratedPojo, OtherObject> mapper =
MagicalMapperLibrary.mapperBuilder(BigGeneratedPojo.class, OtherObject.class)
.from(BigGeneratedPojo::getFirstField).to(OtherObject::reprOfFirstFieldFromOtherObject)
.build();
BigGeneratedPojo pojo = new BigGeneratedPojo();
pojo.firstField = "test";
OtherObject mappedOtherObj = mapper.map(pojo);
assertEquals(mappedOtherObj.getReprOfFirstFieldFromOtherObject(), "test");
источник
Учитывая ваши ограничения, я бы добавил еще один шаг генерации кода. Как реализовать это в точности зависит от построения системы (Maven / Gradle / что - то еще), но JavaParser или жаровня позволит разобрать
BigGeneratedPojo.java
и создать подкласс с требуемыми геттеры / сеттеры, и система сборки должна автоматически обновлять его , еслиBigGeneratedPojo
изменения.источник
IDE, такие как Eclipse и STS, предоставляют возможность добавлять методы получения / установки. мы можем использовать эту опцию для создания методов установки / получения
источник
BigGeneratedPojo
это сгенерированный файл, поэтому для того, чтобы фактически манипулировать им, мне нужно было бы создать его подкласс и иметь класс-обертку с ~ 120 фиктивными методами (60 методов получения / установки), и это кошмар для обслуживания.Я бы предложил использовать отражение, чтобы получить открытые поля из вашего класса и создать методы получения и установки, используя вашу собственную программу на Java, следующим образом. Рассмотрим следующий класс в качестве примера.
Код взят отсюда - слегка изменен, чтобы избежать ненужного
System.out
. Вы можете легко создать файл из своейmain
функции и поместить туда свои методы получения и установки.Вы можете проверить программу, запустив ее здесь . Надеюсь, это поможет.
источник
Вы можете использовать Ломбок. Это простой в использовании и реализации. Он создаст геттеры и сеттеры в посткомпиляции файла .class. Кроме того, код выглядит чище.
}
источник