2017-03-08 4 views
2

J'ai une classe où j'ai injecté un champ à l'aide javax.inject.Inject annotationest de vérifier null de champ annotée avec javax.inject.Inject nécessaire

import javax.inject.Inject; 

public class Foo extends BaseFoo { 
    @Inject 
    private Bar bar; 
    ... 

    public void execute(){ 
    if (bar == null) { 
     //log failure message and return 
     return; 
    } 
    //Do your work.. 
    } 
    ... 
} 

Ma question est de savoir si dans l'exemple ci-dessus, est null contrôle nécessaire ou ne pas? et pourquoi?

+0

Je ne suis pas sûr. J'utiliserais un constructeur injectable dans un champ final. – Michael

+0

Merci pour l'acceptation. Faites-moi savoir s'il y a quelque chose que je pourrais faire pour rendre ma réponse upvote de valeur à vos yeux, comme l'ajout d'autres informations ... – GhostCat

Répondre

0

La réponse est: ça dépend.

Si vous pensez il y a des scénarios valides, où le processus d'injection n'injectera nulle, alors vous avez besoin que l'enregistrement. Si vous pensez que cela ne devrait jamais arriver, vous vous retrouvez probablement avec un NPE à l'exécution; et puis encore; vous devez comprendre par vous-même si ce comportement est «approprié» dans votre contexte (et comment/comment y faire face).

Mais je ferais mieux d'essayer de rendre ce champ final et de mettre l'annotation sur votre constructeur; et puis vous pouvez simplement mettre un Objects.requireNonNull() vérifier sur l'argument entrant; et vous êtes plus tard sûr que tous les objets Foo sont null free.