web-dev-qa-db-fra.com

Alternatives à Lombok pour un code clair sans getters / setters / toString / constructors

Connaissez-vous des alternatives à Lombok? En utilisant Lombok, nous pouvons oublier les classes de messing avec des getters et setters et toString. Je veux l'utiliser dans mon projet, mais je me demande s'il existe de meilleures alternatives?

J'utilise Java 1.7 et je ne peux pas passer à 1.8.

31
user1308908

Je crains, il n'y a pas d'alternative sauf si vous voulez passer à quelque chose comme Scala ou si vous êtes satisfait d'un ensemble plus petit de fonctionnalités comme celles fournies par AutoValue .

Alors que AutoValue est probablement le meilleur que vous puissiez obtenir avec du Java pur, il offre

  • @Getter
  • @AllArgsConstructor
  • @EqualsAndHashCode
  • @ToString
  • @Constructeur

mais ça manque

  • @Flétrir
  • toBuilder
  • @Setter
  • @Déléguer
  • @ExtensionMethod
  • et quelques autres fonctionnalités que je n'utilise pas.

Bien que je convienne fermement que l'immuabilité est une vertu, elle n'est parfois pas applicable. Quoi qu'il en soit, Lombok s'efforce de prendre en charge l'immuabilité, il s'intègre même aux collections immuables de Guava, et vous pouvez écrire

@Builder @Getter public final class Sentence {
    private final boolean truthValue;
    @Singular private final ImmutableList<String> words;    
}

et l'utiliser comme

Sentence s = Sentence.builder().truthValue(true)
    .Word("Lombok").Word("is").Word("cool").build();
assertEquals(3, s.getWords().size());

Remarque: je ne suis pas l'auteur, donc je peux dire que c'est cool.

Pour les immuables, @Wither et toBuilder sont plutôt cool. Le premier vous permet de créer une copie différant par un seul champ et le second vous donne un générateur commençant par les valeurs actuelles et adapté pour changer plusieurs champs. Les deux lignes suivantes sont équivalentes:

o.withA(1).withB(2)
o.toBuilder().a(1).b(2).build()

Lombok et AutoValue utilisent de la magie. La magie de ce dernier est le traitement d'annotation standard, il est donc assez robuste. Il présente certains inconvénients comme indiqué sur page 27 . J'ajouterais le fait que certains AutoValue_foo sont générés que je n'ai pas commandés.

Lombok utilise de la magie noire et est donc beaucoup plus fragile, mais il offre plus et fonctionne assez bien.

24
maaartinus

"Mieux" est assez controversé ici, mais une alternative est AutoValue , disponible ici . Cette présentation explique certaines des différences entre AutoValue et par exemple Lombok.

En particulier, AutoValue met l'accent sur l'immuabilité (une bonne chose, généralement!) Et un minimum de magie extralinguistique (très différent de Lombok).

11
Louis Wasserman