A especificação de um sufixo Exception em classes de exceção parece um cheiro de código para mim (informações redundantes - o restante do nome implica um estado de erro e herda de Exception). No entanto, também parece que todo mundo faz isso e parece ser uma boa prática.
Estou procurando entender por que isso é uma boa prática.
Eu já vi e li a pergunta: por que as exceções geralmente têm a exceção do sufixo no nome da classe
A questão é para PHP e, embora as respostas sejam provavelmente válidas para Java. Existem outros argumentos ou é realmente tão simples quanto diferenciá-los explicitamente?
Se pegarmos os exemplos da pergunta anterior - poderia realmente haver classes em java com o nome FileNoFound
que não é uma exceção? Se houver, justifica o sufixo Exception
?
Olhando para uma hierarquia rápida no eclipse de Exception
, com certeza, a grande maioria deles tem o sufixo de exceção, mas existem algumas exceções. javassist
é um exemplo de uma biblioteca que parece ter algumas exceções sem o sufixo - por exemplo BadByteCode
, BadHttpRequest
etc.
BouncyCastle
é outra lib com exceções como CompileError
Eu pesquisei um pouco também com pouca informação sobre o assunto.
fonte
Exception
sufixo ou devemos fazer exceções para exceções excepcionais?" ;)FileNotFound
ArrayIndexOutOfBounds
eOutOfMemory
são mais observações / descrições, mas são aplicadas ao substantivoException
.Respostas:
A resposta de Landei é boa, mas também há a resposta gramatical. Os nomes das classes devem ser substantivos . O que é um "OutOfMemory"? O que é um "FileNotFound"? Se você pensa em "Exceção" como o substantivo, o descritor é o adjetivo que o especifica. Não é apenas um
Exception
, é umFileNotFoundException
. Você não precisa pegarOutOfMemory
mais do que iria à loja para comprar um "azul".Isso também aparece se você ler seu código como uma frase: "
Try
fazendo ... ecatch OutOfMemory Exceptions
"fonte
OutOfMemory
exceção" é melhor que "Você receberá umaOutOfMemoryException
exceção", não é?OutOfMemoryException
". Dito isto, também temos números PIN e caixas eletrônicos, portanto uma exceção do OOME não seria tão incomum.OutOfMemoryException
" quando pode simplesmente ser "você está sem memória"? Nós não usamosClass
sufixos (DogClass
,CatClass
,XmlReaderClass
, ...).Acho que exceções (e erros, e teoricamente outros
Throwable
) são diferentes de coisas como interfaces ou enumerações (que geralmente não são usadas como sufixo): geralmente têm um objetivo muito claro e limitado, são usadas com construções de linguagem especializadas (try
,catch
,throw
,throws
) e seguir as regras especiais (por exemplo verificado vs exceções não verificadas, não genéricos). De certa forma, não são apenas as classes que são usadas como exceções, mas um mecanismo de exceção que é implementado por meio das classes.Portanto, se você lida com uma exceção e não a reconhece como tal, geralmente algo está profundamente errado (o que também não é o caso de coisas como enumerações ou interfaces). Então, acho que essas diferenças nas classes "normais" são grandes o suficiente para exigir uma pista visual.
fonte
Exception
em Java - você não pode em C #. Se você não puder, não consigo pensar em um cenário em que você "esteja lidando com uma exceção e [não] a reconheça como tal".Throwable
s em Java. No entanto, você pode lidar com a exceção não apenas nas configuraçõestry
-catch
, por exemplo, pode coletar exceções ao fazer algum tipo de validação para objetos complexos (quando quiser conhecer todos os problemas relacionados, não apenas o primeiro). Nesses casos, você deve estar ciente de que pode, por exemplo, voltar a jogar as coisas que tem na sua lista, por isso seria ruim chamá-las, ou seja, emValidationIssue
vez deValidationException
.Sim, todo mundo faz, de fato, por isso é uma prática, mas ainda é bom? Várias pessoas estão questionando isso:
fonte