[Java] Vorsichtsmaßnahmen beim Erstellen eines Prozesses, der eine Methode der Abstract-Klasse mit DI aus einer untergeordneten Klasse aufruft

Dies ist ein Punkt, den Sie beachten sollten, wenn Sie einen Prozess erstellen, der eine Methode der Abstract-Klasse mit DI aus einer untergeordneten Klasse aufruft.

Problematischer Code

Abstrakte Klasse


public class AbstractFoo {
    // DI
    public Bar bar; 

    protected void update() {
        bar.update();
    }

}

Kinderklasse


public class ChildFoo extends AbstractFoo {
    // DI
    public Bar bar; 

    public void updateChild() {
        //Führen Sie die Aktualisierungsmethode der Abstract-Klasse aus
        update(); 
    }

}

Ausführungsergebnis

Beim Ausführen der updateChild-Methode einer untergeordneten Klasse schlägt die Update-Methode der aufgerufenen übergeordneten Klasse mit NullPointerException fehl.

Problemumgehung

Kinderklasse DI public Bar bar; (Zur Verdeutlichung unten kommentieren)

Überarbeitet

Abstrakte Klasse


public class AbstractFoo {
    // DI
    public Bar bar; 

    protected void update() {
        bar.update();
    }

}

Kinderklasse


public class ChildFoo extends AbstractFoo {
    // DI
    // public Bar bar; 

    public void updateChild() {
        //Führen Sie die Aktualisierungsmethode der Abstract-Klasse aus
        update(); 
    }

}

Impressionen etc.

Überschreiben Sie den Inhalt von DI durch die Deklaration in der untergeordneten Klasse → Da er nicht an die Abstract-Klasse übergeben wurde, ist der Balken in der Abstract-Klasse null. In der untergeordneten Klasse wird der in der Abstract-Klasse deklarierte Inhalt vererbt, sodass es nicht erforderlich ist, ihn zuerst erneut zu deklarieren, sondern ... Wenn der Verarbeitungsinhalt (Beschreibungsinhalt) zunimmt, kann er leicht und nachlässig übersehen werden. Seien Sie also vorsichtig.

Recommended Posts

[Java] Vorsichtsmaßnahmen beim Erstellen eines Prozesses, der eine Methode der Abstract-Klasse mit DI aus einer untergeordneten Klasse aufruft
[Java] Wrapper, der die private Methode eines Objekts von außerhalb der Klasse ausführt
Ursache ist nicht sichtbar, wenn Methoden anderer Klassen in Java aufgerufen werden
Ich habe einen Wrapper erstellt, der KNP von Java aus aufruft
[Java] Vorsichtsmaßnahmen beim Referenzieren in einer übergeordneten Klasse und beim Instanziieren in einer untergeordneten Klasse
Beispiel für die Verwendung einer abstrakten Klasse
[Java] Vereinigen Sie diese NG, wenn eine Methode mit einer großen Anzahl von Zeilen mithilfe von schwarzer Magie erkannt wird
[Java] Wie man mit der String-Klasse an die Spitze eines bestimmten Strings kommt
Ich habe eine Klasse erstellt, die JUMAN und KNP aus Java verwenden kann
Ich habe ein Programm erstellt, das aus dem mit Java überladenen Prozess nach der Zielklasse sucht
Erstellen einer Matrixklasse in Java Teil 1
Vorsichtsmaßnahmen bei der Migration von VB6.0 auf JAVA
Inkrementiert durch das dritte Argument der iterierten Methode der aus Java9 hinzugefügten Stream-Klasse