[Java] Eliminierung des Kesselplattencodes mit Lombok

Thema

Wenn Sie beispielsweise in Java sogenannte JavaBeans wie ↓ erstellen, ist die Codemenge abhängig von der Anzahl der Felder ziemlich groß.

public class Book {
    private int id;
    private String name;
    private int price;
    private String publishDate;

    public Book() {
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getPublishDate() {
        return publishDate;
    }

    public void setPublishDate(String publishDate) {
        this.publishDate = publishDate;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", publishDate='" + publishDate + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Book book = (Book) o;
        return id == book.id &&
                price == book.price &&
                Objects.equals(name, book.name) &&
                Objects.equals(publishDate, book.publishDate);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, price, publishDate);
    }
}

Wenn Sie Lombok verwenden, ist dies der Code, der dieselbe Methode wie ↑ hat, indem Sie einfach wie ↓ schreiben.

import lombok.Data;

@Data
public class Book {
    private int id;
    private String name;
    private int price;
    private String publishDate;
}

Es ist praktisch, also werde ich ein wenig darauf eingehen.

Entwicklungsumgebung

OS

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"

Java

$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

IDE

Jeder liebt IntelliJ IDEA

Trainieren

Installationsverfahren

Maven Projektgenerierung

mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.example -DartifactId=try-java-lombok

Lombok zu pom.xml hinzugefügt

  <dependencies>
     〜〜〜
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.4</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

Lombok-Plug-In zu IntelliJ hinzugefügt

001.png

Laden Sie Jar herunter, um zu sehen, wie der Code mit Lombok aussieht

https://projectlombok.org/download

Probieren Sie jede Anmerkung aus

Alle Quellen sind ↓ https://github.com/sky0621/try-java-lombok

@ Getter und @ Setter

Wie der Name schon sagt, wird ein Getter-Setter automatisch generiert, wenn er einer Variablen hinzugefügt wird.

[Quelle für Lombok-Anmerkungen]

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class GetterSetter {
    private String text;
}

[Laufzeitquelle]

public class GetterSetter {
    private String text;

    @java.lang.SuppressWarnings("all")
    public String getText() {
        return this.text;
    }

    @java.lang.SuppressWarnings("all")
    public void setText(final String text) {
        this.text = text;
    }
}

@ToString

wie der Name schon sagt.

[Quelle für Lombok-Anmerkungen]

@lombok.ToString
public class ToString {
    private String text;
}

[Laufzeitquelle]

public class ToString {
    private String text;

    @java.lang.Override
    @java.lang.SuppressWarnings("all")
    public java.lang.String toString() {
        return "ToString(text=" + this.text + ")";
    }
}

@EqualsAndHashCode

Generieren Sie die Methode "equals" und die Methode "hashCode".

[Quelle für Lombok-Anmerkungen]

@lombok.EqualsAndHashCode
public class EqualsAndHashCode {
    private String text;
}

[Laufzeitquelle]

public class EqualsAndHashCode {
    private String text;

    @java.lang.Override
    @java.lang.SuppressWarnings("all")
    public boolean equals(final java.lang.Object o) {
        if (o == this) return true;
        if (!(o instanceof EqualsAndHashCode)) return false;
        final EqualsAndHashCode other = (EqualsAndHashCode) o;
        if (!other.canEqual((java.lang.Object) this)) return false;
        final java.lang.Object this$text = this.text;
        final java.lang.Object other$text = other.text;
        if (this$text == null ? other$text != null : !this$text.equals(other$text)) return false;
        return true;
    }

    @java.lang.SuppressWarnings("all")
    protected boolean canEqual(final java.lang.Object other) {
        return other instanceof EqualsAndHashCode;
    }

    @java.lang.Override
    @java.lang.SuppressWarnings("all")
    public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        final java.lang.Object $text = this.text;
        result = result * PRIME + ($text == null ? 43 : $text.hashCode());
        return result;
    }
}

@NoArgsConstructor

Generieren Sie einen Konstruktor ohne Argumente

[Quelle für Lombok-Anmerkungen]

@lombok.NoArgsConstructor
public class NoArgsConstructor {
}

[Laufzeitquelle]

public class NoArgsConstructor {
	@java.lang.SuppressWarnings("all")
	public NoArgsConstructor() {
	}
}

@AllArgsConstructor

Generieren Sie den Konstruktor für die vollständige Argumentspezifikation

[Quelle für Lombok-Anmerkungen]

@lombok.AllArgsConstructor
public class AllArgsConstructor {
    private int id;
    private String name;
    private Date created;
}

[Laufzeitquelle]

public class AllArgsConstructor {
    private int id;
    private String name;
    private Date created;

    @java.lang.SuppressWarnings("all")
    public AllArgsConstructor(final int id, final String name, final Date created) {
        this.id = id;
        this.name = name;
        this.created = created;
    }
}

@RequiredArgsConstructor

Generieren Sie einen Konstruktor mit einem Parameter für jedes Feld, das eine spezielle Verarbeitung erfordert

[Quelle für Lombok-Anmerkungen]

@lombok.RequiredArgsConstructor
public class RequiredArgsConstructor {
    @NonNull
    private int id;

    @NonNull
    private String text;

    private Data created;
}

[Laufzeitquelle]

import lombok.Data;
import lombok.NonNull;

public class RequiredArgsConstructor {
    @NonNull
    private int id;
    @NonNull
    private String text;
    private Data created;

    @java.lang.SuppressWarnings("all")
    public RequiredArgsConstructor(@NonNull final int id, @NonNull final String text) {
        if (text == null) {
            throw new java.lang.NullPointerException("text is marked @NonNull but is null");
        }
        this.id = id;
        this.text = text;
    }
}

@Data

Von den oben eingeführten Anmerkungen werden "@ ToString", "@ EqualsAndHashCode" und "@ Getter" zu allen Feldern hinzugefügt, und "@ Setter" wird zu allen "endgültigen" Feldern hinzugefügt. Außerdem wird "@ RequiredArgsConstructor" hinzugefügt.

[Quelle für Lombok-Anmerkungen]

@lombok.Data
public class Data {
    private int id;
    private String name;
    private int price;
    private String publishDate;
}

[Laufzeitquelle]

public class Data {
    private int id;
    private String name;
    private int price;
    private String publishDate;

    @java.lang.SuppressWarnings("all")
    public Data() {
    }

    @java.lang.SuppressWarnings("all")
    public int getId() {
        return this.id;
    }

    @java.lang.SuppressWarnings("all")
    public String getName() {
        return this.name;
    }

    @java.lang.SuppressWarnings("all")
    public int getPrice() {
        return this.price;
    }

    @java.lang.SuppressWarnings("all")
    public String getPublishDate() {
        return this.publishDate;
    }

    @java.lang.SuppressWarnings("all")
    public void setId(final int id) {
        this.id = id;
    }

    @java.lang.SuppressWarnings("all")
    public void setName(final String name) {
        this.name = name;
    }

    @java.lang.SuppressWarnings("all")
    public void setPrice(final int price) {
        this.price = price;
    }

    @java.lang.SuppressWarnings("all")
    public void setPublishDate(final String publishDate) {
        this.publishDate = publishDate;
    }

    @java.lang.Override
    @java.lang.SuppressWarnings("all")
    public boolean equals(final java.lang.Object o) {
        if (o == this) return true;
        if (!(o instanceof Data)) return false;
        final Data other = (Data) o;
        if (!other.canEqual((java.lang.Object) this)) return false;
        if (this.getId() != other.getId()) return false;
        final java.lang.Object this$name = this.getName();
        final java.lang.Object other$name = other.getName();
        if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false;
        if (this.getPrice() != other.getPrice()) return false;
        final java.lang.Object this$publishDate = this.getPublishDate();
        final java.lang.Object other$publishDate = other.getPublishDate();
        if (this$publishDate == null ? other$publishDate != null : !this$publishDate.equals(other$publishDate)) return false;
        return true;
    }

    @java.lang.SuppressWarnings("all")
    protected boolean canEqual(final java.lang.Object other) {
        return other instanceof Data;
    }

    @java.lang.Override
    @java.lang.SuppressWarnings("all")
    public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        result = result * PRIME + this.getId();
        final java.lang.Object $name = this.getName();
        result = result * PRIME + ($name == null ? 43 : $name.hashCode());
        result = result * PRIME + this.getPrice();
        final java.lang.Object $publishDate = this.getPublishDate();
        result = result * PRIME + ($publishDate == null ? 43 : $publishDate.hashCode());
        return result;
    }

    @java.lang.Override
    @java.lang.SuppressWarnings("all")
    public java.lang.String toString() {
        return "Data(id=" + this.getId() + ", name=" + this.getName() + ", price=" + this.getPrice() + ", publishDate=" + this.getPublishDate() + ")";
    }
}

Zusammenfassung

Es gibt immer noch nützliche Anmerkungen, aber heute ist keine Zeit mehr. Der Rest wird später kommen.

Recommended Posts

[Java] Eliminierung des Kesselplattencodes mit Lombok
[Java] Eliminierung des Kesselplattencodes mit Lombok 2
Beispielcode mit Minio aus Java
Führen Sie Java-Code skriptweise aus
Java-Code-TIPPS
Java-Beispielcode 02
Java-Beispielcode 03
Java-Beispielcode 04
Java-Beispielcode 01
Java-Zeichencode
[Java] Konvertieren Sie DB-Code mit enum in einen Codewert
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Erstellen Sie mit Gradle mit VSCode Java → Ausführen
Schreiben Sie Selenium Java-Bindungscode mit Silk WebDriver
Sortieren mit Java-Komparator
Lombok mit VS Code
Schrottpraxis mit Java ②
Schrottpraxis mit Java ①
Unterschiede im Code bei Verwendung des Längensystems in Java
Erstellen Sie einen QR-Code für Google Authenticator mit ZXing in Java
Die Geschichte der Verwendung von Java Input Waiting (Scanner) mit VSCode
Beispielcode für elektronische Signatur (JAVA)
Java Parallel Code Sample Collection
Versuchen Sie, mit Java zu kratzen [Hinweis]
Sammlung von Java-Testcode-Methoden
[Windows] Java-Code ist verstümmelt
[Rails] Testcode mit Rspec
Verwenden von Mapper mit Java (Spring)
Java mit Visual Studio Code
Schreiben Sie Java8-ähnlichen Code in Java8
Ich habe versucht, Java REPL zu verwenden
Reduzieren Sie redundanten Code mit Lombok
Verwenden von Docker von Java Gradle
Machen Sie einen Diamanten mit Java
Blasensortierung mit ArrayList (JAVA)
Vermeiden Sie Zeichencodefehler in Java, wenn Sie die VScode-Erweiterung RUN-CODE verwenden