Qual a exceção mais apropriado pro meu caso, StateException ou ArgumentException?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
analyser
JavaEvangelist
[Avatar]

Membro desde: 26/02/2007 09:31:49
Mensagens: 329
Offline

Olá, tenho um ambiente onde forneço serviços a cliente que são aplicações externas, e nesses serviços recebo um objeto como parametro que representa uma entidade, e no meu serviço valido se a entidade (argumento), passado como parâmetro é válido, entre essas validações verifico se o estado do objeto é válido tb, pois isso faz parte do contrato.

Agora a dúvida, qual exceção devo lançar para o meu cliente, IllegalArgumentException ou IllegalStateException, já que o argumento que ele me passou é inválido e seu estado tb pode ser.

Até mais.

Analyser
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Use IllegalArgumentException para esse caso. IllegalStateException é utilizada quando um método é chamado em um momento inapropriado.

This message was edited 1 time. Last update was at 29/09/2009 11:42:52


Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

analyser
JavaEvangelist
[Avatar]

Membro desde: 26/02/2007 09:31:49
Mensagens: 329
Offline

tnaires wrote:Use IllegalArgumentException para esse caso. IllegalStateException é utilizada quando um método é chamado em um momento inapropriado.


Obrigado pelo resposta tnaires, eu vi a um tempo o post do "Shoes", sobre contratos nulos (http://www.fragmental.com.br/wiki/index.php/Contratos_Nulos), e nele ele utiliza o IllegalStateException, para denotar que o estado do objeto é inválido, não seria esse o caso tb, o estado do objeto que recebi é inválido?

Valew

Analyser
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

O Shoes usa IllegalStateException para validar o estado do próprio objeto, e não de outro que ele esteja recebendo como argumento de método. Ou seja, sempre que os dados do objeto sofrem alguma modificação, é preciso checar seu estado. Caso ele tenha chegado em um estado inválido, uma IllegalStateException é lançada. Sacou a diferença?

Como exemplo, temos a classe abaixo:

Não é responsabilidade do método subtrair() validar o estado do objeto passado como parâmetro.

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

analyser
JavaEvangelist
[Avatar]

Membro desde: 26/02/2007 09:31:49
Mensagens: 329
Offline

Valew tnaires, eu já tinha imaginado essa diferença, mais é que o sentido da exception deixa duvida, e é sempre bom ouvir a opnião dos outros.

valew e abraço

Analyser
andredecotia
JWizard
[Avatar]

Membro desde: 19/10/2009 14:37:32
Mensagens: 2267
Localização: São Paulo
Offline

//método
public void subtrair(TestarIllegalState b) {
this.valor -= b.getValor();
//o argumento foi válido, mas dependendo do valor o objeto pode chegar
//a um estado inválido.
if (valor < 0) {
throw new IllegalStateException("Um número natural não pode ser menor que zero.");
}
}



não entendí essa parte... tou tentando gerar essa exceções...

--
André AS


Analista Programador Java Web freelancer / home office
Linkedin: http://www.linkedin.com/profile/view?id=41470291&trk=tab_pro

[Email] [MSN] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team