Tenemos un POJO que se genera automáticamente con ~ 60 propiedades. Esto se genera con avro 1.4, que no incluye getters / setters.
Una biblioteca que utilizamos para proporcionar transformaciones simples entre objetos requiere métodos de tipo getter / setter para funcionar correctamente.
¿Hay alguna manera de replicar getters / setters sin tener que anular manualmente el POJO y crear todos los getters / setters manualmente?
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 ... };
}
el deseo es escribir código que se vea así:
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");
fuente
Dadas sus limitaciones, agregaría otro paso de generación de código. Cómo implementarlo depende exactamente en su sistema de construcción (Maven / Gradle / otra cosa), pero javaparser o tostador le permitirá analizar sintácticamente
BigGeneratedPojo.java
y crear una subclase con los getters / setters deseados, y el sistema de construcción debe actualizar de forma automática siBigGeneratedPojo
los cambios.fuente
IDEs como Eclipse y STS brindan la opción de agregar métodos getters / setters. podemos usar esas opciones para crear métodos setters / getters
fuente
BigGeneratedPojo
es un archivo generado, por lo que para manipularlo realmente necesitaría subclasificarlo y tener una clase de contenedor con ~ 120 métodos ficticios (60 captadores / establecedores) y es una pesadilla de mantener.Sugeriría usar la reflexión para obtener los campos públicos de su clase y crear los captadores y establecedores utilizando su propio programa Java de la siguiente manera. Considere la siguiente clase como ejemplo.
El código se toma desde aquí , ligeramente modificado para evitar innecesarios
System.out
. Puede crear fácilmente un archivo desde sumain
función y poner allí sus captadores y establecedores.Puede verificar el programa ejecutándolo aquí también. Espero que eso ayude.
fuente
Puedes usar Lombok. Es fácil de usar e implementar. Creará getters y setter en la compilación posterior a archivos .class. También mantiene el código más limpio.
}
fuente