Ich werde einen Auszug dessen schreiben, was ich beim Lesen von Effective Java 3rd Edition interessant fand

Ich werde einen Auszug dessen schreiben, was ich beim Lesen von Effective Java 3rd Edition interessant fand. Das Buch selbst wird noch gelesen, daher kann es in Zukunft hinzugefügt werden. In diesem Fall ist nicht entschieden, ob dieser Artikel aktualisiert oder ein neuer Artikel geschrieben werden soll.

Item 42 : Prefer lambdas to anonymous classes Die Schreibmethode für eine eindeutige Methodenimplementierung für jede Enum-Instanz, die in "Punkt 34: Nachahmen einer erweiterbaren Enum mit einer Schnittstelle" in Effective Java 2nd Edition eingeführt wurde, wurde mithilfe von Lambda in eine Methode geändert. Klicken Sie hier, um zu erfahren, wie Sie in der zweiten Ausgabe schreiben.

EnumFunctionV2.java


public enum EnumFunctionV2 {
    PLUS("+") {
        @Override
        public double apply(double x, double y){ return x + y; }
    },
    MINUS("-") {
        @Override
        public double apply(double x, double y){ return x - y; }
    },
    TIMES("*") {
        @Override
        public double apply(double x, double y){ return x * y; }
    },
    DEVIDE("/") {
        @Override
        public double apply(double x, double y){ return x / y; }
    };

    private final String symbol;

    //Konstrukteur
    EnumFunctionV2(String symbol) {
        this.symbol = symbol;
    }

    @Override
    public String toString() {
        return symbol;
    }

    public abstract double apply(double x, double y);
}

Auf diese Weise können Sie eine abstrakte Methode definieren und jede Enum-Instanz überschreiben. Es ist praktisch, aber etwas schwer zu sehen ... Klicken Sie hier, um zu erfahren, wie Sie in der 3. Ausgabe schreiben.

EnumFunctionV3.java


import java.util.function.DoubleBinaryOperator;

public enum EnumFunctionV3 {
    PLUS("+", (x, y) -> x + y),
    MINUS("-", (x, y) -> x - y),
    TIMES("*", (x, y) -> x * y),
    DEVIDE("/", (x, y) -> x / y);

    private final String symbol;
    private final DoubleBinaryOperator op;

    //Konstrukteur
    EnumFunctionV3(String symbol, DoubleBinaryOperator op) {
        this.symbol = symbol;
        this.op = op;
    }

    @Override
    public String toString() {
        return symbol;
    }

    public double apply(double x, double y) {
        return op.applyAsDouble(x, y);
    }
}

Zusammenfassung ist verschwunden. Haben Sie DoubleBinaryOperator im zweiten Argument des Konstruktors und verwenden Sie Lambda, um die Methode zu erstellen Ich schreibe die Implementierung direkt. Der Inhalt ist der gleiche wie in der zweiten Ausgabe, aber ich denke, dass dies sauberer und leichter zu sehen ist. Beide werden auf die gleiche Weise aufgerufen.

EnumFunctionTest.java


public class EnumFunctionTest {
    public static void main(String... args) {
        //Rufen Sie die 2. Ausgabe
        System.out.println("【v2】");
        //Aufruf von Methoden für alle Instanzen während der Schleife
        for (EnumFunctionV2 func2: EnumFunctionV2.values()) {
            System.out.print(func2 + ":");
            System.out.println(func2.apply(1, 2));
        }
        //Wenn Sie die Methode jeder Instanz einzeln aufrufen möchten, sieht dies folgendermaßen aus
        System.out.println(EnumFunctionV2.PLUS.apply(1, 2));

        //Rufen Sie die 3. Ausgabe
        System.out.println("【v3】");
        //Aufruf von Methoden für alle Instanzen während der Schleife
        for (EnumFunctionV3 func3: EnumFunctionV3.values()) {
            System.out.print(func3 + ":");
            System.out.println(func3.apply(1, 2));
        }
        //Wenn Sie die Methode jeder Instanz einzeln aufrufen möchten, sieht dies folgendermaßen aus
        System.out.println(EnumFunctionV3.PLUS.apply(1, 2));
    }
}

Ausführungsergebnis 【v2】 +:3.0 -:-1.0 *:2.0 /:0.5 3.0 【v3】 +:3.0 -:-1.0 *:2.0 /:0.5 3.0

das ist alles. Ich war überrascht, wie man Lambda benutzt, also schrieb ich es auf.

abschließend

Wie ich zu Beginn schrieb, lese ich gerade Effective Java 3rd Edition (2. Mai 2019). Da ich es von Anfang an nicht gelesen habe, habe ich dieses Mal (2. Mai 2019) über Punkt 42 geschrieben, aber es besteht die Möglichkeit, dass ich danach Punkt 1 hinzufügen werde. Die dritte Ausgabe enthält die Punkte 1 bis 90. Effective Java ist ein Buch, das seit langem als Meisterwerk von Java gilt. Ich denke daher, dass Java-Benutzer es einmal lesen sollten. Die dritte Ausgabe wurde am 6. Januar 2018 für die englische Version und am 30. Oktober 2018 für die japanische Version veröffentlicht. Ich denke, es kann für eine Weile verwendet werden. Wenn Sie interessiert sind, lesen Sie es bitte.

Verweise

Effective Java (3rd Edition)

Recommended Posts

Ich werde einen Auszug dessen schreiben, was ich beim Lesen von Effective Java 3rd Edition interessant fand
Was hat sich zwischen Effective Java 2nd Edition und 3rd Edition geändert?
Effektive Java 3rd Edition Kapitel 5 Generika
Effektive Java 3rd Edition Kapitel 8 Methoden
Effektives Java 3rd Edition Kapitel 9 Programm Allgemein
Effektive Java 3rd Edition Kapitel 6 Aufzählung und Anmerkungen
Effektive Java 3rd Edition Kapitel 4 Klassen und Schnittstellen
Effektive Java 3rd Edition Kapitel 7 Lambda und Stream
Ich habe jetzt Oracle Java Bronze SE 7/8 genommen, daher werde ich es als Artikel schreiben
Ich habe versucht, Effective Java 3rd Edition "fast alle Kapitel" in "leicht lesbarem Japanisch" zu erklären.