[Java] Précautions lors de la création d'un processus qui appelle une méthode de classe abstraite utilisant DI à partir d'une classe enfant

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.

Code problématique

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(); 
    }

}

Résultat d'exécution

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.

solution de contournement

Classe enfant DI public Bar bar; (Commentez ci-dessous pour plus de clarté)

modifié

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(); 
    }

}

Impressions etc.

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

[Java] Précautions lors de la création d'un processus qui appelle une méthode de classe abstraite utilisant DI à partir d'une classe enfant
[Java] Wrapper qui exécute la méthode privée d'un objet depuis l'extérieur de la classe
La cause n'est pas visible lors de l'appel de méthodes d'autres classes en java
J'ai créé un Wrapper qui appelle KNP depuis Java
[Java] Précautions lors du référencement dans une classe parent et de l'instanciation dans une classe enfant
Exemple d'utilisation d'une classe abstraite
[Java] JUnit qui NG lorsqu'une méthode avec un grand nombre de lignes est détectée en utilisant la magie noire
[Java] Comment accéder au début d'une chaîne spécifique à l'aide de la classe String
J'ai créé une classe qui peut utiliser JUMAN et KNP de Java
J'ai créé un programme qui recherche la classe cible à partir du processus surchargé avec Java
Création d'une classe de matrice dans Java Partie 1
Précautions lors de la migration de VB6.0 vers JAVA
Incrémenté du troisième argument de la méthode iterate de la classe Stream ajoutée depuis Java9