[JAVA] J'ai trouvé Lombok utile alors je l'ai écrit

Résumons ce que nous avons appris dans la série sur le terrain (Introduction)

En l'état, c'est une série qui résume les outils etc. appris (utilisés) sur le terrain. Je l'écris avec le sentiment que c'est aussi pour moi et que ça devrait être pour quelqu'un. Nous attendons avec impatience vos suggestions et commentaires concernant les erreurs et les méthodes de description!

Qu'est-ce que Lombok?

C'est une bibliothèque qui peut éliminer le code de la plaque chauffante Java [^ 1] en ajoutant des annotations. Juste en l'annotant, il ** implémentera des getters et des setters ** pour tous les champs, et ** implémentera des constructeurs **!

Personnellement, je pense qu'il est très compatible avec ** Spring-Boot ** car cela facilite la création de classes de données et l'injection de constructeurs! Il est également utile lorsque vous souhaitez utiliser un objet immuable [^ 2]. Veuillez l'utiliser!

À propos, la lecture semble être «Ronbok» ou «Ronboku». Je suis une secte «Lomboc».

Explication et utilisation des annotations

De là, nous expliquerons chaque annotation.

Getter、Setter Vous pouvez implémenter des getters et des setters en donnant @ Getetter et @ Setter à la classe ou au champ. Par exemple, supposons que vous implémentiez le "Sample.java" suivant.

Sample.java


@Getter
@Setter
public class Sample {
  private String id;
  private String name;
  private Integer age:
}

Si vous compilez ce qui précède et vérifiez le contenu de Sample.class, ce sera comme suit.

Sample.class


public class Sample {
  private String id;
  private String name;
  private Integer age:

  public String getId() {
    return this.id;
  }

  public String getName() {
    return this.name;
  }

  public Integer getAge() {
    return this.name;
  }

  public void setId(String id) {
    this.id = id;
  }

  public void setName(String name) {
    this.name = name;
  }

  public void setAge(Integer age) {
    this.age = age;
  }
}

… Vous avez bien implémenté des getters et des setters pour tous les domaines. Plus vous avez de champs, moins vous pouvez faire de description!

Dans cet exemple, il est donné à la classe, Si vous ne voulez pas le donner à tous les champs, donnez-le à chaque champ!

〇 〇 Constructeur Args

Il s'agit d'une annotation qui génère automatiquement un constructeur simplement en l'ajoutant. Il existe trois types.

RequiredArgsConstructor En supposant que le Sample.java implémenté est le suivant

Sample.java


@RequiredArgsConstructor
public class Sample {
  private final String id;
  private final String name;
  private Integer age;
}

Le "Sample.class" suivant sera créé.

Sample.class


public class Sample {
  private final String id;
  private final String name;
  private Integer age;

  public Sample(String id, String name) {
    this.id = id;
    this.name = name;
  }
}

NoArgsConstructor + AllArgsConstructor Si vous en donnez plusieurs, le constructeur sera généré en conséquence. En raison des spécifications Java, le constructeur par défaut ne sera pas implémenté si le constructeur est implémenté explicitement. @ NoArgsConstructor a aussi beaucoup de tours.

Sample.java


@NoArgsConstructor
@AllArgsConstructor
public class Sample {
  private String id;
  private String name;
  private Integer age;
}

Sample.class


public class Sample {
  private String id;
  private String name;
  private Integer age;

  public Sample() {
  };

  public Sample (String id, String name, Integer age) {
    this.id = id;
    this.name = name;
    this.age = age;
  }
}

Cette combinaison fonctionne bien avec MyBatis Entity Class.

ToString Comme son nom l'indique, @ ToString implémente (remplace) toString. Vous pouvez également utiliser ʻexclude` pour exclure le champ cible.

Sample.java


@ToString(exclude = "age")
public class Sample {
  private String id;
  private String name;
  private Integer age;
}

Sample.class


public class Sample {
  private String id;
  private String name;
  private Integer age;

  @Override
  public String toString() {
    return "Sample(id=" + this.id + ", name=" + this.name + ")");
  }
}

EqualsAndHashCode Comme son nom l'indique, @ EqualsAndHashCode implémente également (remplace) ʻequals et hashCode`. La raison pour laquelle ces deux éléments forment un ensemble est qu'ils sont [mécaniquement liés et ne doivent pas se contredire](https://qiita.com/yoshi389111/items/9e34fe297bd908a36065#hashcode-%E3%81%AE% En effet, E5% 9F% BA% E6% 9C% AC).

Sample.java


@EqualsAndHashCode
public class Sample {
  private String name;
  private int age;
}

Sample.class


public class Sample {
  private String name;
  private int age;

  public boolean equals(Object o) {
    if (o == this) return true;
    if (!(o instanceof Person)) return false;
    final Person other = (Person) o;
    if (!other.canEqual((Object) this)) return false;
    final Object this$name = this.name;
    final Object other$name = other.name;
    if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false;
    if (this.age != other.age) return false;
    return true;
  }

  public int hashCode() {
    final int PRIME = 59;
    int result = 1;
    final Object $name = this.name;
    result = result * PRIME + ($name == null ? 0 : $name.hashCode());
    result = result * PRIME + this.age;
    return result;
  }

  protected boolean canEqual(Object other) {
    return other instanceof Person;
  }
}

La commodité est inconnue car je ne l'ai pas du tout utilisé sur le terrain.

Value Lorsque «@ Value» est ajouté, les annotations suivantes sont ajoutées et il devient un objet immuable.

La valeur est définie par le constructeur au moment de la génération et la valeur ne peut pas être modifiée par la suite. C'est une annotation que vous souhaitez utiliser lorsque vous souhaitez en faire un objet véritablement immuable. Vous pouvez générer des méthodes de fabrique statiques en définissant l'option staticConstructor. Dans ce cas, le constructeur sera changé en private, vous ne pourrez donc pas créer une instance sans passer par la méthode factory.

Data Si «@ Data» est ajouté, ce sera le même que lorsque les annotations suivantes sont ajoutées.

Il s'agit d'une annotation qui résume les fonctions des annotations similaires à «@ Value». Ceci est similaire à l'image de la création d'une classe de bean simple.

finalement

J'ai beaucoup écrit, mais je ne peux pas le maîtriser. .. Même s'il a «@ Value», il a «final». (Il n'y a pas de problème car cela fonctionne normalement simplement parce qu'il est redondant)

Cette fois, j'ai présenté les annotations susceptibles d'être utilisées fréquemment. Certaines annotations n'ont pas encore été introduites Il existe de nombreuses options comme staticConstructor, donc si vous êtes intéressé, veuillez le vérifier! !!

Merci d'avoir lu jusqu'au bout!

officiel

Officiel de Lombok

[^ 1]: Le code de la plaque de la chaudière est un code standard qui ne peut pas être omis en raison des spécifications linguistiques. Code redondant qui doit être écrit même si ce n'est pas l'essence de la logique. [^ 2]: un objet dont la valeur ne change pas après sa création.

Recommended Posts

J'ai trouvé Lombok utile alors je l'ai écrit
J'ai trouvé MyBatis utile, alors je l'ai écrit.
Méthodes que j'ai trouvées utiles dans Ruby
J'ai passé Ruby Silver (juin 2020), je vais donc le résumer.
firewalld est devenu fou, alors j'ai réussi à le réparer
Parquet-tools donne java.lang.ExceptionInInitializerError, donc je l'ai fait fonctionner avec java8
Java SE 13 (JSR388) est sorti alors je l'ai essayé