Lombok-pg, le complément idéal de Lombok, propose l’annotation @ExtensionMethod qui permet d’ajouter des petites fonctionnalités directement dans nos objets.
Partons de mon bean favori, le Dog :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Dog { private Integer id; private String name; private String fullName; private SexeEnum sex; private Date birthday; private String race; private Boolean lof; private Double weight; private Double size; private List<String> colors; ... // + getters / setters |
Dans ma classe de service, je fais des traitements sur mon chien :
1 2 3 4 5 6 | public class DogService { public void foo() { Dog milou = new Dog("Milou", 12.5, ...); ... } |
Je veux par exemple déterminer si mon chien est trop gros, en calculant son IMC, mais je voudrais faire comme si c’était l’objet Dog qui possédait cette méthode. Pour cela, Lombok-pg me fournit l’annotation @ExtensionMethod qui va être sacrement pratique.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @ExtensionMethod({ Dog.class, MyDogExtensionClass.class }) public class DogService { public void foo() { Dog milou = new Dog("Milou", 12.5, ...); final boolean isTooFat = milou.isTooFat(); // Et voilà ... } ... } class MyDogExtensionClass { public static boolean isTooFat(final Dog dog) { final double imc = dog.getWeight() / pow(dog.getSize(), 2); // imc = w / h² return 25 < imc; } } |
Regarde http://thierry-leriche-dessirier.developpez.com/tutoriels/java/simplifier-code-guava-lombok/
Bonjour,
Je ne connais pas ce framework. Si j’ai bien compris l’annotation permet d’ajouter des méthodes à un bean ou d’ajouter un genre de wrapper. Mais que est l’avantage de cette approche ? Dans l’exemple que tu as donné il semble que cela remplace une méthode utilitaire.