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.
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();
}
}
Beim Ausführen der updateChild-Methode einer untergeordneten Klasse schlägt die Update-Methode der aufgerufenen übergeordneten Klasse mit NullPointerException fehl.
Kinderklasse DI public Bar bar; (Zur Verdeutlichung unten kommentieren)
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();
}
}
Ü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