[Java] Eliminierung des Kesselplattencodes mit Lombok 2

Thema

In Fortsetzung von Letztes Mal führte Lombok die Kesselplattenfunktion ein.

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

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

@Builder

Quelle für Builder-Muster generieren (https://sourcemaking.com/design_patterns/builder)

[Quelle für Lombok-Anmerkungen]

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

[Laufzeitquelle]

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

    @java.lang.SuppressWarnings("all")
    Builder(final int id, final String name, final int price, final String publishDate) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.publishDate = publishDate;
    }


    @java.lang.SuppressWarnings("all")
    public static class BuilderBuilder {
        @java.lang.SuppressWarnings("all")
        private int id;
        @java.lang.SuppressWarnings("all")
        private String name;
        @java.lang.SuppressWarnings("all")
        private int price;
        @java.lang.SuppressWarnings("all")
        private String publishDate;

        @java.lang.SuppressWarnings("all")
        BuilderBuilder() {
        }

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

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

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

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

        @java.lang.SuppressWarnings("all")
        public Builder build() {
            return new Builder(id, name, price, publishDate);
        }

        @java.lang.Override
        @java.lang.SuppressWarnings("all")
        public java.lang.String toString() {
            return "Builder.BuilderBuilder(id=" + this.id + ", name=" + this.name + ", price=" + this.price + ", publishDate=" + this.publishDate + ")";
        }
    }

    @java.lang.SuppressWarnings("all")
    public static BuilderBuilder builder() {
        return new BuilderBuilder();
    }
}

[Wie benutzt man]

public class Main {
    public static void main(String... args){
        System.out.println(
                Builder.builder()
                        .id(100)
                        .name("Name")
                        .price(937)
                        .publishDate("2018-11-09")
                        .build().toString());
    }
}

@Value

Unveränderliche Klasse generieren

[Quelle für Lombok-Anmerkungen]

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

[Laufzeitquelle]

public final class Value {
    private final int id;
    private final String name;
    private final int price;
    private final String publishDate;

    @java.lang.SuppressWarnings("all")
    public Value(final int id, final String name, final int price, final String publishDate) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.publishDate = publishDate;
    }

    @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.Override
    @java.lang.SuppressWarnings("all")
    public boolean equals(final java.lang.Object o) {
        if (o == this) return true;
        if (!(o instanceof Value)) return false;
        final Value other = (Value) o;
        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.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 "Value(id=" + this.getId() + ", name=" + this.getName() + ", price=" + this.getPrice() + ", publishDate=" + this.getPublishDate() + ")";
    }
}

@Cleanup

Es fügt eine Nachbearbeitungs-Schließlogik wie das Öffnen von Dateien hinzu. Wenn Sie jedoch Java 7 oder höher verwenden, sollten Sie Try-with-Resources verwenden. Wenn Sie es also verwenden, können Sie möglicherweise bis zu Java 6 verwenden.

public class Cleanup {
    public static void main(String[] args) throws IOException {
        @lombok.Cleanup InputStream in = new FileInputStream(args[0]);
        @lombok.Cleanup OutputStream out = new FileOutputStream(args[1]);
        byte[] b = new byte[10000];
        while (true) {
            int r = in.read(b);
            if (r == -1) break;
            out.write(b, 0, r);
        }
    }
}
import java.io.*;

public class Cleanup {
    public static void main(String[] args) throws IOException {
        InputStream in = new FileInputStream(args[0]);
        try {
            OutputStream out = new FileOutputStream(args[1]);
            try {
                byte[] b = new byte[10000];
                while (true) {
                    int r = in.read(b);
                    if (r == -1) break;
                    out.write(b, 0, r);
                }
            } finally {
                if (java.util.Collections.singletonList(out).get(0) != null) {
                    out.close();
                }
            }
        } finally {
            if (java.util.Collections.singletonList(in).get(0) != null) {
                in.close();
            }
        }
    }
}

@Log (java.util.logger.Logger)

[Quelle für Lombok-Anmerkungen]

@lombok.extern.java.Log
public class LogExample {
    public static void main(String... args) {
        log.severe("Something's wrong here");
    }
}

[Laufzeitquelle]

public class LogExample {
    @java.lang.SuppressWarnings("all")
    private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());

    public static void main(String... args) {
        log.severe("Something\'s wrong here");
    }
}

@NonNull

Fügen Sie eine Nullprüfung für das Methodenargument ein. Standardmäßig wird jedoch "NullPointerException" ausgelöst. Es kann in "IllegalArgumentException" geändert werden.

[Quelle für Lombok-Anmerkungen]

public class NonNull {
    private int id;
    @lombok.NonNull
    private String name;

    public void setNonNull(@lombok.NonNull Book book) {
        this.name = book.getName();
    }
}

[Laufzeitquelle]

public class NonNull {
    private int id;
    @lombok.NonNull
    private String name;

    public void setNonNull(@lombok.NonNull Book book) {
        if (book == null) {
            throw new java.lang.NullPointerException("book is marked @NonNull but is null");
        }
        this.name = book.getName();
    }
}

Zusammenfassung

Vorerst habe ich einige der Grundfunktionen aufgegriffen und vorgestellt. Die Hauptfamilie ist übrigens ↓ https://projectlombok.org/features/all

Andere experimentelle Merkmale werden unten vorgestellt. https://projectlombok.org/features/experimental/all

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
Erste Schritte mit Java-Programmen mit Visual Studio 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
Versuchen Sie es mit RocksDB mit Java
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