[JAVA] Ich fand Lombok nützlich, also schrieb ich es

Fassen wir zusammen, was wir in der Feldserie gelernt haben (Einführung)

So wie es ist, handelt es sich um eine Reihe, die die auf dem Gebiet erlernten (verwendeten) Werkzeuge usw. zusammenfasst. Ich schreibe es mit dem Gefühl, dass es auch für mich selbst ist und dass es für jemanden sein sollte. Wir freuen uns auf Ihre Vorschläge und Kommentare zu Fehlern und Beschreibungsmethoden!

Was ist Lombok?

Es ist eine Bibliothek, die Java-Kesselplattencode [^ 1] durch Hinzufügen von Anmerkungen entfernen kann. Nur durch Annotation werden Getter und Setter für alle Felder implementiert und Konstruktoren implementiert!

Ich persönlich denke, dass ** Spring-Boot sehr kompatibel ist **, weil es einfacher ist, Datenklassen zu erstellen und Konstruktoren zu injizieren! Dies ist auch nützlich, wenn Sie ein unveränderliches Objekt [^ 2] verwenden möchten. Bitte benutzen Sie es!

Übrigens scheint die Lesung "Ronbok" oder "Ronboku" zu sein. Ich bin eine Lomboc-Sekte.

Erläuterung und Verwendung von Anmerkungen

Von hier aus werden wir jede Anmerkung erklären.

Getter、Setter Sie können Getter und Setter implementieren, indem Sie der Klasse oder dem Feld "@ Getetter" und "@ Setter" geben. Angenommen, Sie implementieren die folgende Sample.java.

Sample.java


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

Wenn Sie das oben Gesagte kompilieren und den Inhalt von Sample.class überprüfen, ist dies wie folgt.

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

… Sie haben Getter und Setter für alle Bereiche gut implementiert. Je mehr Felder Sie haben, desto weniger Beschreibung können Sie machen!

In diesem Beispiel wird es der Klasse gegeben, Wenn Sie es nicht allen Feldern geben möchten, geben Sie es jedem Feld!

〇 〇 Args-Konstruktor

Dies ist eine Anmerkung, die automatisch einen Konstruktor generiert, indem sie ihn einfach hinzufügt. Es gibt drei Arten.

RequiredArgsConstructor Angenommen, die implementierte Sample.java lautet wie folgt

Sample.java


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

Die folgende Sample.class wird erstellt.

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 Wenn Sie mehr als eine angeben, wird der Konstruktor entsprechend generiert. Aufgrund der Java-Spezifikationen wird der Standardkonstruktor nicht implementiert, wenn der Konstruktor explizit implementiert ist. @ NoArgsConstructor hat auch viele Wendungen.

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

Diese Kombination funktioniert gut mit MyBatis Entity Class.

ToString Wie der Name schon sagt, implementiert "@ ToString" "toString" (überschreibt). Sie können auch "ausschließen" verwenden, um das Zielfeld auszuschließen.

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 Wie der Name schon sagt, implementiert (@ EqualsAndHashCode) auch "equals" und "hashCode" (überschreibt). Der Grund, warum diese beiden eine Menge sind, ist, dass sie [mechanisch verwandt sind und nicht widersprechen dürfen](https://qiita.com/yoshi389111/items/9e34fe297bd908a36065#hashcode-%E3%81%AE% Dies liegt daran, dass 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;
  }
}

Die Bequemlichkeit ist unbekannt, weil ich sie im Feld überhaupt nicht benutzt habe.

Value Wenn "@ Value" hinzugefügt wird, werden die folgenden Anmerkungen hinzugefügt und es wird ein unveränderliches Objekt.

Der Wert wird vom Konstruktor zum Zeitpunkt der Generierung festgelegt und kann danach nicht mehr geändert werden. Es ist eine Anmerkung, die Sie verwenden möchten, wenn Sie daraus ein wirklich unveränderliches Objekt machen möchten. Sie können statische Factory-Methoden generieren, indem Sie die Option staticConstructor festlegen. In diesem Fall wird der Konstruktor in "privat" geändert, sodass Sie keine Instanz erstellen können, ohne die Factory-Methode zu durchlaufen.

Data Wenn "@ Data" hinzugefügt wird, entspricht dies dem Hinzufügen der folgenden Anmerkungen.

Dies ist eine Annotation, die die Funktionen von Annotationen zusammenfasst, die @ Value ähneln. Dies ähnelt dem Bild des Erstellens einer einfachen Bean-Klasse.

Schließlich

Ich habe viel geschrieben, aber ich kann es nicht beherrschen. .. Obwohl es "@ Value" hat, hat es "final". (Es gibt kein Problem, da es normal funktioniert, nur weil es redundant ist.)

Dieses Mal habe ich die Anmerkungen vorgestellt, die wahrscheinlich häufig verwendet werden. Einige Anmerkungen wurden noch nicht eingeführt Es gibt viele Optionen wie "staticConstructor". Wenn Sie also interessiert sind, probieren Sie es bitte aus! !!

Vielen Dank für das Lesen bis zum Ende!

offiziell

Lombok Official

[^ 1]: Der Kesselplattencode ist ein Standardcode, der aufgrund von Sprachspezifikationen nicht weggelassen werden kann. Redundanter Code, der geschrieben werden muss, obwohl er nicht die Essenz der Logik ist. [^ 2]: Ein Objekt, dessen Wert sich nach seiner Erstellung nicht ändert.

Recommended Posts

Ich fand Lombok nützlich, also schrieb ich es
Ich fand MyBatis nützlich, also habe ich es geschrieben.
Methoden, die ich in Ruby nützlich fand
Ich habe Ruby Silver (Juni 2020) bestanden, also werde ich es zusammenfassen.
firewalld wurde verrückt, also konnte ich es reparieren
Parkett-Tools gibt java.lang.ExceptionInInitializerError, also habe ich es mit java8 funktionieren lassen
Java SE 13 (JSR388) wurde veröffentlicht, also habe ich es versucht