C'est un point à noter lors de la création d'un processus qui appelle une méthode de la classe Abstract en utilisant DI à partir d'une classe enfant.
Classe abstraite
public class AbstractFoo {
// DI
public Bar bar;
protected void update() {
bar.update();
}
}
Classe enfant
public class ChildFoo extends AbstractFoo {
// DI
public Bar bar;
public void updateChild() {
//Exécutez la méthode de mise à jour de la classe Abstract
update();
}
}
Lors de l'exécution de la méthode updateChild d'une classe enfant, la méthode de mise à jour de la classe parent appelée échoue avec une exception NullPointerException.
Classe enfant DI public Bar bar; (Commentez ci-dessous pour plus de clarté)
Classe abstraite
public class AbstractFoo {
// DI
public Bar bar;
protected void update() {
bar.update();
}
}
Classe enfant
public class ChildFoo extends AbstractFoo {
// DI
// public Bar bar;
public void updateChild() {
//Exécutez la méthode de mise à jour de la classe Abstract
update();
}
}
Remplacer le contenu de DI par la déclaration dans la classe enfant → Comme il n'a pas été passé à la classe Abstract, bar devient par conséquent nul dans la classe Abstract. Dans la classe enfant, le contenu déclaré dans la classe Abstract est hérité, il n'est donc pas nécessaire de le déclarer à nouveau en premier lieu, mais ... Au fur et à mesure que le contenu du traitement (contenu de la description) augmente, il est facile de le négliger et de le négliger, alors soyez prudent.
Recommended Posts