Nous avons un POJO qui est généré automatiquement avec environ 60 propriétés. Ceci est généré avec avro 1.4, qui n'inclut pas les getters / setters.
Une bibliothèque que nous utilisons pour fournir des transformations simples entre des objets nécessite des méthodes de type getter / setter pour fonctionner correctement.
Existe-t-il un moyen de répliquer les getters / setters sans avoir à remplacer manuellement le POJO et à créer tous les getters / setters manuellement?
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 ... };
}
le souhait est d'écrire du code qui ressemble à:
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");
la source
Compte tenu de vos contraintes, j'ajouterais une autre étape de génération de code. Comment mettre en œuvre dépend exactement de votre système de construction (Maven / Gradle / autre chose), mais JavaParser ou Roaster vous permettra d'analyser
BigGeneratedPojo.java
et de créer une sous - classe avec les getters / setters souhaités, et le système de construction devrait mettre à jour automatiquement si desBigGeneratedPojo
changements.la source
Les IDE comme Eclipse et STS fournissent une option pour ajouter des méthodes getters / setters. nous pouvons utiliser ces options pour créer des méthodes setters / getters
la source
BigGeneratedPojo
s'agit d'un fichier généré, donc pour le manipuler, je devrais le sous-classer et avoir une classe wrapper avec ~ 120 méthodes factices (60 getters / setters) et c'est un cauchemar à maintenir.Je suggérerais d'utiliser la réflexion pour obtenir les champs publics de votre classe et créer les getters et setters en utilisant votre propre programme Java comme suit. Considérez la classe suivante comme exemple.
Le code est tiré d'ici - légèrement modifié pour éviter inutile
System.out
. Vous pouvez facilement créer un fichier à partir de votremain
fonction et y placer vos getters et setters.Vous pouvez également vérifier le programme en l' exécutant ici . J'espère que ça aide.
la source
Vous pouvez utiliser Lombok. Est facile à utiliser et à mettre en œuvre. Il créera des getters et setter dans la compilation de fichiers .class. Il garde également le code plus propre.
}
la source