2009-05-06 7 views
200

En particulier, existe-t-il une sous-classe Exception utilisée dans ces circonstances?Quelle est l'exception standard à lancer en Java pour les opérations non prises en charge/implémentées?

+0

Est-il approprié d'utiliser lorsqu'une classe n'implémente pas une méthode, mais que les classes enfants peuvent le faire? En d'autres termes, avoir une méthode abstraite dans une classe non-abstraite. – osa

+0

@SergeyOrshanskiy C'est utile quand, selon la façon dont vous construisez un objet, vous devez créer une classe anonyme qui implémente une interface afin d'instancier une variable membre, mais vous ne voulez pas qu'elle soit utilisée. Si vous le définissez sur 'null' et que vous l'avez accidentellement utilisé (ou quelqu'un d'autre), vous obtiendrez 'NullPointerExceptions' qui est moins évident que' UnsupportedOperationExceptions' dans ce cas. Juste un exemple. – 2rs2ts

Répondre

291

java.lang.UnsupportedOperationException

pour indiquer que Jetés l'opération demandée n'est pas pris en charge.

+0

ignorer ce ridicule "cela fait partie de la structure des collections" c'est dans le paquet 'java.lang.', le JavaDoc dit explicitement que c'est pour ça. –

+3

@JarrodRoberson OK, cette instruction devrait vraiment être supprimée de la documentation de classe dans ce cas. L'exception semble être utilisée par d'autres paquets. Je suppose que si Oracle le fait, alors nous devrions le faire. Je vais déposer un rapport de bug. –

8

Si vous voulez une plus grande granularité et une meilleure decription, vous pouvez utiliser NotImplementedException de commons-lang

Attention: avant les versions 2.6 et après les versions 3.2, seulement.

164

Différencier entre les deux cas, vous avez nommé:

  • Pour indiquer que l'opération demandée est pas prise en charge et très probablement ne le sera jamais, jeter un UnsupportedOperationException.

  • Pour indiquer l'opération demandée n'a pas encore été mis en œuvre, choisir entre ceci:

    1. Utilisez le NotImplementedException de apache commons-lang qui était disponible dans commons-lang2 et a été ajouté à nouveau commons-lang3 en version 3.2.

    2. Créez le vôtre NotImplementedException.

    3. Lancez un UnsupportedOperationException avec un message du type "Non implémenté".

+0

Je pars avec ça, parce que cela me semble raisonnable. "Pourtant" ou "jamais" indiqué par l'Exception donne une idée sur la façon de réagir à ce sujet. – sschrass

+1

#s 1 ou 2 sont grandement préférables en pratique.# 3 capture la distinction sémantique entre "non supporté" et "non implémenté", mais avoir une classe séparée facilite la recherche rapide pour vérifier que vous n'avez pas oublié d'implémenter tout ce que vous devriez faire avant de vous engager. –

4

Si vous créez une nouvelle fonction (non encore mis en œuvre) dans NetBeans, il génère un corps de méthode avec la déclaration suivante:

throw new java.lang.UnsupportedOperationException("Not supported yet."); 

Par conséquent, je vous recommande d'utiliser le UnsupportedOperationException .

Questions connexes