Especificar un sufijo de Excepción en las clases de excepción me parece un olor a código (Información redundante: el resto del nombre implica un estado de error y hereda de Excepción). Sin embargo, también parece que todos lo hacen y parece ser una buena práctica.
Estoy buscando entender por qué esta es una buena práctica.
Ya he visto y leído la pregunta por qué las excepciones suelen tener la excepción de sufijo en el nombre de la clase
La pregunta es para PHP y, si bien las respuestas son probablemente válidas para Java. ¿Hay otros argumentos o es realmente tan simple como diferenciarlos explícitamente?
Si tomamos los ejemplos de la pregunta anterior, ¿podría realmente haber clases en Java con el nombre FileNoFound
que no sea una excepción? Si pudiera haberlo, ¿merece sufijo Exception
?
Mirando una jerarquía rápida en eclipse de Exception
, efectivamente, la gran mayoría de ellos tienen el sufijo de excepción, pero hay algunas excepciones. javassist
es un ejemplo de una biblioteca que parece tener algunas excepciones sin el sufijo, por ejemplo BadByteCode
,BadHttpRequest
etc.
BouncyCastle
es otra lib con excepciones como CompileError
También busqué en Google un poco con poca información sobre el tema.
fuente
Exception
sufijo, o deberíamos hacer excepciones para excepciones excepcionales?" ;)FileNotFound
ArrayIndexOutOfBounds
yOutOfMemory
son más observaciones / descripciones, pero luego se aplican al sustantivoException
.Respuestas:
La respuesta de Landei es buena, pero también está la respuesta gramatical. Los nombres de las clases deben ser sustantivos . ¿Qué es un "OutOfMemory"? ¿Qué es un "FileNotFound"? Si piensa en "Excepción" como el sustantivo, entonces el descriptor es el adjetivo que lo especifica. No es cualquiera
Exception
, es unFileNotFoundException
. No debería necesitar atraparOutOfMemory
más de lo que iría a la tienda a comprar un "azul".Esto también aparece si lee su código como una oración: "
Try
haciendo ... ycatch OutOfMemory Exceptions
"fuente
OutOfMemory
excepción" se lee mejor que "Obtendrá unaOutOfMemoryException
excepción", ¿no?OutOfMemoryException
". Dicho esto, también tenemos números PIN y cajeros automáticos, por lo que una excepción OOME no sería tan inusual.OutOfMemoryException
" cuando simplemente puede ser "no tiene memoria"? No utilizamosClass
sufijos (DogClass
,CatClass
,XmlReaderClass
, ...).Creo que las excepciones (y los errores, y en teoría otros
Throwable
) son diferentes de cosas como interfaces o enumeraciones (que generalmente no se usan como sufijo): generalmente tienen un propósito muy claro y limitado, se usan con construcciones de lenguaje especializadas (try
,catch
`throw
`throws
) y seguir las reglas especiales (por ejemplo comprobado vs excepciones sin marcar, no hay genéricos). En cierto modo, no son solo clases que se utilizan como excepciones, sino un mecanismo de excepción que se implementa por medio de clases.Entonces, si está lidiando con una excepción y no la reconoce como tal, por lo general, algo está profundamente mal (lo cual nuevamente no es el caso para cosas como enumeraciones o interfaces). Así que creo que estas diferencias con las clases "normales" son lo suficientemente grandes como para requerir una pista visual.
fuente
Exception
Java, no puedes hacerlo en C #. Si no puede, entonces no puedo pensar en un escenario en el que estaría "lidiando con una excepción y [no] reconocerla como tal".Throwable
s en Java. Sin embargo, puede lidiar con la excepción no solo en la configuracióntry
-catch
, por ejemplo, puede recopilar excepciones cuando realiza algún tipo de validación para objetos complejos (cuando desea conocer todos los problemas relacionados, no solo el primero). En tales casos, debe tener en cuenta que puede, por ejemplo, volver a tirar las cosas que tiene en su lista, por lo que sería malo llamarlas, es decir, enValidationIssue
lugar deValidationException
.Sí, todo el mundo lo hace, así que es una práctica, pero ¿sigue siendo bueno? Varias personas se preguntan que:
fuente