@ExtensionMethod de Lombok-pg

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;
  }
}

2 réflexions au sujet de « @ExtensionMethod de Lombok-pg »

  1. Avatar de jpoulsonjpoulson

    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.

Laisser un commentaire