La spécification d'un suffixe d'Exception sur les classes d'exceptions me semble être une odeur de code (informations redondantes - le reste du nom implique un état d'erreur et hérite d'Exception). Cependant, il semble également que tout le monde le fasse et cela semble être une bonne pratique.
Je cherche à comprendre pourquoi c'est une bonne pratique.
J'ai déjà vu et lu la question de savoir pourquoi les exceptions ont généralement l'exception de suffixe dans le nom de la classe
La question est pour PHP et bien que les réponses soient probablement valables pour Java. Y a-t-il d'autres arguments ou est-ce vraiment aussi simple que de les différencier explicitement?
Si nous prenons les exemples de la question précédente - pourrait-il vraiment y avoir des classes en java avec le nom FileNoFound
qui ne fait pas exception? S'il peut y en avoir, cela justifie-t-il son suffixe Exception
?
En regardant une hiérarchie rapide dans l'éclipse de Exception
, bien sûr, la grande majorité d'entre eux ont le suffixe d'exception, mais il y a quelques exceptions. javassist
est un exemple de bibliothèque qui semble avoir quelques exceptions sans le suffixe - par exemple BadByteCode
, BadHttpRequest
etc.
BouncyCastle
est une autre bibliothèque avec des exceptions comme CompileError
J'ai aussi cherché un peu sur Google avec peu d'informations sur le sujet.
la source
Exception
suffixe, ou devrions-nous faire des exceptions pour les exceptions exceptionnelles?" ;)FileNotFound
ArrayIndexOutOfBounds
etOutOfMemory
sont plus d'observations / descriptions, mais sont ensuite appliquées au nomException
.Réponses:
La réponse de Landei est bonne, mais il y a aussi la réponse grammaticale. Les noms de classe doivent être des noms . Qu'est-ce qu'un "OutOfMemory"? Qu'est-ce qu'un "FileNotFound"? Si vous pensez à "Exception" comme le nom, alors le descripteur est l'adjectif qui le spécifie. Ce n'est pas n'importe lequel
Exception
, c'est unFileNotFoundException
. Vous ne devriez pas avoir besoin d'attraper unOutOfMemory
plus que vous n'iriez au magasin pour acheter un "bleu".Cela apparaît également si vous lisez votre code sous la forme d'une phrase: "
Try
faire ..., etcatch OutOfMemory Exceptions
"la source
OutOfMemory
exception" se lit mieux que "Vous obtiendrez uneOutOfMemoryException
exception", n'est-ce pas?OutOfMemoryException
." Cela dit, nous avons également des codes PIN et des distributeurs automatiques de billets, donc une exception OOME ne serait pas si inhabituelle.OutOfMemoryException
» quand il peut simplement être « vous êtes hors de la mémoire »? Nous n'utilisons pasClass
suffixes (DogClass
,CatClass
,XmlReaderClass
, ...).Je pense que les exceptions (et les erreurs, et théoriquement d'autres
Throwable
) sont différentes de choses comme les interfaces ou les énumérations (qui ne sont généralement pas utilisées comme suffixe): elles ont généralement un objectif très clair et limité, elles sont utilisées avec des constructions de langage spécialisées (try
,catch
,throw
,throws
) et suivre des règles spéciales (par exemple vérifié vs exceptions non vérifiées, pas de génériques). D'une certaine manière, ce ne sont pas seulement des classes qui sont utilisées comme exceptions, mais un mécanisme d'exception qui est implémenté au moyen de classes.Donc, si vous traitez une exception et que vous ne la reconnaissez pas en tant que telle, généralement quelque chose ne va pas (ce qui n'est pas le cas pour des choses comme les énumérations ou les interfaces). Je pense donc que ces différences par rapport aux classes "normales" sont suffisamment importantes pour exiger un indice visuel.
la source
Exception
Java - vous ne pouvez pas en C #. Si vous ne le pouvez pas, alors je ne peux pas penser à un scénario où vous seriez "face à une exception et [ne] la reconnaissez pas comme telle".Throwable
s en Java. Cependant, vous pouvez traiter l'exception non seulement dans les paramètrestry
-catch
, par exemple, vous pouvez collecter des exceptions lorsque vous effectuez une sorte de validation pour des objets complexes (lorsque vous voulez connaître tous les problèmes associés, pas seulement le premier). Dans de tels cas, vous devez savoir que vous pouvez par exemple relancer les choses que vous avez dans votre liste, il serait donc mauvais de les appeler, c'est-à-direValidationIssue
au lieu deValidationException
.Oui, tout le monde le fait en effet, c'est donc une pratique, mais est-ce toujours bon? Plusieurs personnes s'interrogent sur:
la source