[Java] Behandlung von Java Beans in der Methodenkette

Ich dachte darüber nach, wie ich mit von JavaBeans erstellten Objekten in einer Methodenkette umgehen soll.

Java Beans-Spezifikation

Ich weiß nicht, ob es sich um die genaue Spezifikation handelt, aber die allgemeinen JavaBeans-Spezifikationen lauten wie folgt.

Es gibt viele andere Dinge, aber das Wichtigste ist dieses. Klicken Sie hier für offizielle Spezifikationen → Java Beans Spec

HogeBean.java


public class HogeBean {

    private String name;

    private String id;

    public String getName() {
        return name;
    }

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

    public String getId() {
        return id;
    }

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

So was. Mit Lombok

HogeBean.java


@Data
public class HogeBean {

    private String name;

    private String id;
}

Das ist in Ordnung.

Probleme mit der Methodenkette

Angenommen, Sie haben eine HogeBean und eine FugaBean mit ähnlichen Feldern.

HogeBean.java


@Data
public class HogeBean {

    private String name;

    private String id;
}

FugaBean.java


@Data
public class FugaBean {

    private String id;

    private String password;
}

Wenn Sie HogeBean in Stream in FugaBean konvertieren möchten, denken Sie normal

List<HogeBean> hoges = ...

hoges.stream().map(hoge -> {

    FugaBean fuga = new FugaBean();
    fuga.setId(hoge.getId());
    return fuga;
    
}).Beendigung

Ich werde nur so schreiben. Es ist nicht so schön.

Lösung 1 Anonymer Klassen- + Instanzinitialisierer

Es mag nicht sehr schön sein, aber die mittlere Klammer + Rückkehr in der Karte ist ein Muster, das verhindert werden kann.

hoges.stream().map(hoge -> new FugaBean(){
    {
        setId(hoge.getId());
    }
}).Beendigung

Es ist viel sauberer als zuvor. Aber es gibt Nachteile

Lösung 2 Lassen Sie den Setter sich selbst zurückgeben, damit das Objekt in einer Zeile erstellt werden kann.

Die Option zum Beenden von JavaBeans. Ändern Sie den Setter wie folgt.

FugaBean.java


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

Fügen Sie für lombok einfach Accessors hinzu (chain = true)

FugaBean.java


@Data
@Accessors(chain = true)

Die Bearbeitung der Angelegenheit kann wie folgt erfolgen

hoges.stream().map(hoge -> new FugaBean().setId(hoge.getId())).Beendigung

Erfrischend. Aber es gibt doch Nachteile,

Lösung 3 Machen Sie einen kleinen Builder

So was

BeanCreater.java


public final class BeanCreater<T> {

    private BeanCreater() {
    }

    private T bean;

    public static <T> BeanCreater<T> of(Supplier<T> supplier) {

        BeanCreater<T> builder = new BeanCreater<T>();
        builder.bean = supplier.get();

        return builder;

    }
    
    public BeanCreater<T> construct(Consumer<T> consumer) {

        consumer.accept(this.bean);
        return this;
    }
    
    public T build() {
        return this.bean;
    }

}

Mit diesem,

hoges.stream().map(hoge -> BeanCreater.of(FugaBean::new)
    .construct(bean -> bean.setId(hoge.getId())).build()).Beendigung

Hmm. Ich habe es versucht, aber es ist nicht gut genug. Der Code ist zu laut.

Fazit

Persönlich mag ich Lösung 2 am meisten. Es hat eine fließende Schnittstelle und es gibt keine Verschwendung im Wesentlichen und zeremonielle Gespräche. Ich hoffe, dass JavaBeans angesichts der aktuellen Situation flexibler wird. (Ich glaube nicht, dass das der Fall ist ...) Klicken Sie hier, um den diesmal erstellten BeanCreater anzuzeigen: https://github.com/7tsuno/BeanCreater

Bitte geben Sie an, wenn Sie weitere Ideen haben!

Recommended Posts

[Java] Behandlung von Java Beans in der Methodenkette
Methodenname der Methodenkette in Java Builder + α
Rufen Sie die Super-Methode in Java auf
Was ist die Hauptmethode in Java?
Die Geschichte des Schreibens von Java in Emacs
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
Die Geschichte des einfachen String-Vergleichs in Java
Die Geschichte eines gewöhnlichen Othello in Java
Über die Idee anonymer Klassen in Java
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Die Geschichte des Lernens von Java in der ersten Programmierung
Messen Sie die Größe eines Ordners mit Java
Spüren Sie den Lauf der Zeit auch in Java
Importieren Sie Dateien derselben Hierarchie in Java
[Java] Ist es nicht erforderlich, "Identität" bei der Implementierung der equals () -Methode zu überprüfen?
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
Ändern Sie die Speicherqualität von JPEG-Bildern in Java
Fassen Sie die zusätzlichen Elemente der optionalen Klasse in Java 9 zusammen
Über den Umgang mit Null
[Java] Praxis der Ausnahmebehandlung [Ausnahme]
Vorteile der statischen Java-Methode
Java-Implementierung von Tri-Tree
Ausnahmebehandlungstechniken in Java
[Java] Ganzzahlige Informationen von Zeichen in der Textdatei, die mit der Methode read () erfasst wurden
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
Wurde im Basisjahr der Java-Kalenderwoche durchgeführt
Ich habe [Klonmethode für Java-Arrays] als Klonmethode in Java-Arrays übersetzt.
Eine kurze Erklärung der fünf Arten von Java Static
[Android, Java] Praktische Methode zur Berechnung der Differenz in Tagen
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
Zählen Sie die Anzahl der Stellen nach dem Dezimalpunkt in Java
So leiten Sie den letzten Tag des Monats in Java ab
Zusammenfassung der von der Spliterator-Merkmalsmethode #java zurückgegebenen Werte
Greifen Sie mit Java auf die Netzwerkschnittstelle zu
[Java] Löschen Sie die Elemente von List
Errate den Zeichencode in Java
[Java Edition] Geschichte der Serialisierung
Automatische Methode zur Größenänderung von Fotos von Java
Geben Sie den Java-Speicherort in eclipse.ini an
Java-Vergleich mit der compareTo () -Methode
Entpacken Sie die Zip-Datei in Java
Umgang mit Zeitzonen mit Java
[Hinweis] Behandlung von Java-Dezimalstellen
Liste der in Java 9 hinzugefügten Mitglieder
Informationen zur Rolle der Initialisierungsmethode
Analysieren der COTOHA-API-Syntaxanalyse in Java
Schrittweises Verständnis der Behandlung von Java-Ausnahmen
Liste der in Java 9 hinzugefügten Typen
Reihenfolge der Verarbeitung im Programm
Der Ursprung von Java-Lambda-Ausdrücken
Implementierung einer ähnlichen Funktion in Java
Umgang mit Java-Gleitkomma Beim Lesen des Nachschlagewerks [Hinweis]
Untersuchen Sie die Systeminformationen der AWS Lambda-Betriebsumgebung in Java
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
Geben Sie die Differenz zwischen jedem Feld zweier Objekte in Java aus
Untersuchen Sie die Liste der in AWS Lambda + Java verfügbaren Schriftarten
Die in /lib/calendars.properties von Java jre festgelegte Millisekunde ist UTC
Untersuchen Sie die Liste der Zeitzonen-IDs, die in der Java ZoneId-Klasse verfügbar sind
Rufen Sie die öffentliche URL der privaten Datei von Flickr in Java ab