Est-il approprié d'utiliser lorsqu'une classe n'implémente pas de 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
@SergeyOrshanskiy C'est utile lorsque, 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 nullet que vous l'utilisez accidentellement (ou que quelqu'un d'autre l'a fait), vous obtiendrez des éléments NullPointerExceptionsmoins évidents que UnsupportedOperationExceptionsdans ce cas. Juste un exemple.
@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 packages. Je suppose que si Oracle le fait, nous le devrions aussi. Je déposerai un rapport de bogue.
Maarten Bodewes
1
Sachez que ceci n'est pas contrôléRuntimeException . Vous n'obtiendrez aucune rétroaction ou assistance dans la gestion de ces exceptions pendant la compilation. Si cela est utilisé pour une méthode tronquée ou un travail en cours, vous devez utiliser une sorte d' exception vérifiée .
TastyWheat
221
Faites la différence entre les deux cas que vous avez nommés:
Pour indiquer que l'opération demandée n'est pas prise en charge et ne le sera probablement jamais, lancez un UnsupportedOperationException.
Pour indiquer que l'opération demandée n'a pas encore été implémentée, choisissez entre:
J'y vais, car cela me semble raisonnable. «Pourtant» ou «jamais» indiqué par l'exception donne une idée de la façon de réagir à ce sujet.
sschrass
3
Les # 1 ou 2 sont largement préférables en pratique. # 3 capture la distinction sémantique entre "non pris en charge" et "non implémenté", mais le fait d'avoir une classe distincte facilite la recherche rapide pour vérifier que vous n'avez pas oublié d'implémenter tout ce que vous devriez avant de valider.
Sean U
4
# 3 est préférable pour les méthodes non implémentées car il ne nécessite pas de bibliothèque tierce ou de travail supplémentaire, même s'il s'agit de commons-lang.
JoshDM
28
Si vous créez une nouvelle fonction (pas encore implémentée) dans NetBeans , elle génère un corps de méthode avec l'instruction suivante:
null
et que vous l'utilisez accidentellement (ou que quelqu'un d'autre l'a fait), vous obtiendrez des élémentsNullPointerExceptions
moins évidents queUnsupportedOperationExceptions
dans ce cas. Juste un exemple.Réponses:
java.lang.UnsupportedOperationException
la source
RuntimeException
. Vous n'obtiendrez aucune rétroaction ou assistance dans la gestion de ces exceptions pendant la compilation. Si cela est utilisé pour une méthode tronquée ou un travail en cours, vous devez utiliser une sorte d' exception vérifiée .Faites la différence entre les deux cas que vous avez nommés:
Pour indiquer que l'opération demandée n'est pas prise en charge et ne le sera probablement jamais, lancez un
UnsupportedOperationException
.Pour indiquer que l'opération demandée n'a pas encore été implémentée, choisissez entre:
Utilisez le
NotImplementedException
from apache commons-lang qui était disponible dans commons-lang2 et a été rajouté à commons-lang3 dans la version 3.2.Mettez en œuvre le vôtre
NotImplementedException
.Lancez un
UnsupportedOperationException
avec un message comme "Pas encore implémenté".la source
Si vous créez une nouvelle fonction (pas encore implémentée) dans NetBeans , elle génère un corps de méthode avec l'instruction suivante:
Par conséquent, je recommande d'utiliser l' exception UnsupportedOperationException .
la source
Si vous voulez plus de granularité et une meilleure description, vous pouvez utiliser NotImplementedException de commons-lang
Avertissement: disponible avant les versions 2.6 et après les versions 3.2 uniquement.
la source