[JAVA] nullPointerException

Bonjour,

j'essaie de tester une classe qui gère une liste de maillons chaînés symétriques qui contiennent un objet de type générique (avec l'aide d'un élément courant) et j'obtiens toujours une exception due à un pointeur vide. En fait, cette exception est censée être bloquée par le fait que l'élément courant n'existe pas. Toutefois, l'exception est levée à la ligne du "return m.info();"

Descriptif des méthodes utilisées à l'intérieur de la méthode problème:

new MaillonSymetrique( MaillonSymetrique<T> precedent, element, MaillonSymetrique<T> suivant ) ---> Crée un objet de type générique qui pointe vers les objets précédent et suivant.

courantEstDefini() ---> Retourne TRUE si l'élément courant a été défini

info() ---> Retourne l'objet element du MaillonSymetrique<T> en question

Voici donc la méthode problème,

/**
* Retourne la valeur de l'élément courant s'il est défini.
* @return la valeur de l'élément courant.
* @throws NoSuchElementException si l'élément courant n'est pas défini.
*/
public T valeurElementCourant () throws NoSuchElementException{
MaillonSymetrique<T> m = new MaillonSymetrique( null, null, null );

if( !courantEstDefini() )
{
throw new NoSuchElementException( messageErreur );
}
else
{
m = elementCourant;
}

return m.info();
}

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,

    Tu peux, dans un premier temps, mettre ton message d'erreur dans m et agir en fonction de ce qui est retourné.

    Cordialement,

    Dan
    1. Modérateur
      Je ne vois qu'une seule raison pour que ça plante ici, c'est que elementCourant vaut null, ce qui signifierai alors que courantEstDefini() ne fonctionne pas correctement, puisqu'elle aurait du renvoyer false lors de son appel.

      Remarque : l'initialisation de m avec ton new(null,null,null) est totalement abject, cela
      créé un objet en mémoire qui ne sera jamais utilisé !

      public boolean courantEstDefini()
      {
          return elementCourant!=null;
      }
      
      public T valeurElementCourant() throws NoSuchElementException
      {
          if (courantEstDefini())
              return elementCourant.info();
          else
              throw new NoSuchElementException(messageErreur);
      }
      1. En fait le problème se cachait beaucoup plus profondément que je l'imaginais. La syntaxe horrible de la méthode valeurElementCourant était due à un trop grand nombre d'essais à corriger un problème qui se trouvait ailleurs.