Temos um POJO gerado automaticamente com ~ 60 propriedades. Isso é gerado com o avro 1.4, que não inclui getters / setters.
Uma biblioteca que usamos para fornecer transformações simples entre objetos requer métodos do tipo getter / setter para funcionar corretamente.
Existe uma maneira de replicar getters / setters sem ter que substituir manualmente o POJO e criar todos os 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 ... };
}
o desejo é escrever um código parecido com:
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");
fonte
Dadas as suas restrições, eu adicionaria outra etapa de geração de código. Como implementá-lo depende exatamente do seu sistema de compilação (Maven / Gradle / outra coisa), mas o JavaParser ou Roaster permitirá analisar
BigGeneratedPojo.java
e criar uma subclasse com os getters / setters desejados, e o sistema de compilação deve atualizá-lo automaticamente se houverBigGeneratedPojo
alterações.fonte
IDEs como Eclipse e STS oferecem opção para adicionar métodos getters / setters. podemos usar essas opções para criar métodos setters / getters
fonte
BigGeneratedPojo
ser um arquivo gerado, portanto, para realmente manipulá-lo, eu precisaria subclassificá-lo e ter uma classe de wrapper com métodos fictícios 120 ~ fictícios (60 getters / setters) e é um pesadelo para manter.Eu sugeriria o uso de reflexão para obter os campos públicos de sua classe e criar os getters e setters usando seu próprio programa Java da seguinte maneira. Considere a seguinte classe como um exemplo.
O código é retirado daqui - ligeiramente modificado para evitar desnecessários
System.out
. Você pode facilmente criar um arquivo a partir de suamain
função e colocar seus getters e setters lá.Você pode verificar o programa executando-o aqui também. Espero que ajude.
fonte
Você pode usar Lombok. É fácil de usar e implementar. Ele criará getters e setter na compilação de postagem de arquivo .class. Também mantém o código mais limpo.
}
fonte