Mamy POJO, które jest automatycznie generowane z ~ 60 właściwościami. Jest to generowane w avro 1.4, który nie obejmuje getterów / setterów.
Biblioteka, której używamy do zapewniania prostych transformacji między obiektami, wymaga metod podobnych do getter / setter w celu poprawnego działania.
Czy istnieje sposób replikacji modułów pobierających / ustawiających bez konieczności ręcznego nadpisywania POJO i ręcznego tworzenia wszystkich modułów pobierających / ustawiających?
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 ... };
}
pragnieniem jest napisanie kodu, który wygląda następująco:
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");
źródło
Biorąc pod uwagę twoje ograniczenia, dodam kolejny etap generowania kodu. Sposób implementacji zależy dokładnie od twojego systemu kompilacji (Maven / Gradle / coś innego), ale JavaParser lub Roaster pozwoli ci na parsowanie
BigGeneratedPojo.java
i utworzenie podklasy z pożądanymi modułami pobierającymi / ustawiającymi, a system kompilacji powinien automatycznie ją aktualizować w przypadkuBigGeneratedPojo
zmian.źródło
IDE, takie jak Eclipse i STS, zapewniają opcję dodawania metod pobierających / ustawiających. możemy użyć tej opcji do stworzenia metod ustawiających / pobierających
źródło
BigGeneratedPojo
jest to wygenerowany plik, więc aby go manipulować, musiałbym go podklasować i mieć klasę otoki w / ~ 120 fikcyjnych metod (60 getterów / setterów) i jest to koszmar do utrzymania.Sugerowałbym użycie refleksji, aby uzyskać publiczne pola z twojej klasy i utworzyć moduły pobierające i ustawiające za pomocą własnego programu Java w następujący sposób. Rozważ następującą klasę jako przykład.
Kod jest pobierany stąd - nieznacznie zmodyfikowany, aby uniknąć niepotrzebnego
System.out
. Możesz łatwo utworzyć plik zmain
funkcji i umieścić tam swoje gettery i settery.Możesz sprawdzić program, uruchamiając go również tutaj . Mam nadzieję że to pomogło.
źródło
Możesz użyć Lombok. Jest łatwy w użyciu i wdrażaniu. Będzie tworzył gettery i settera w kompilacji po pliku .class. Utrzymuje również kod w czystości.
}
źródło