public static double sacar2(double valor) {//ao chamar o método deverá passar um valor
if(valor <= 0){
throw new NumberFormatException("Não pode ser 0 ou negativo!");
}
else{
saldo -= valor;
}
return valor;
}
poderia ser IllegalArgumentException? Qual outra poderia ser?
Bem ao meu ver a unica coisa que poderia acontecer é ser passada um caracter ai.
Abraços
G
garcia-jj
Eu usaria um IllegalArgumentException, pois um dos parametros de entrada está errado/invalido. Se fosse algo que pudesse alterar o estado dos meus objetos seria um IllegalStateException. Para os casos de parametros obrigatórios que estão nulos eu uso NullPointerException.
andrejusti
eu faria assim…
/**
* Saca da conta e retona o saldo.
*
* {@link NullPointerException} se for passado o valor do saque nulo.
*
* {@link IllegalArgumentException} se for passado o valor do saque negativo.
*
* {@linl ExcetionParticular} se o valor do saque for maior que o valor do saldo.
*
* @param valueToDraw valor a ser sacado.
* @return valor do saldo apos o saque.
*/
public Double drawAndGetBalance(final Double valueToDraw) {
if (valueToDraw == null) {
throw new NullPointerException("É necessario informar o valor a ser sacado.");
}
if (valueToDraw.doubleValue() <= 0) {
throw new IllegalArgumentException("O valor do saque deve ser possitivo.");
}
synchronized (this.balance) {
if (this.balance.doubleValue() < valueToDraw.doubleValue()) {
// Alguma exception propria da camada de negocio informando que 'O valor do saque é maior que o
// saldo'...
}
return this.balance = this.balance - valueToDraw;
}
}
Rapapel
andrejusti:
eu faria assim…
/**
* Saca da conta e retona o saldo.
*
* {@link NullPointerException} se for passado o valor do saque nulo.
*
* {@link IllegalArgumentException} se for passado o valor do saque negativo.
*
* {@linl ExcetionParticular} se o valor do saque for maior que o valor do saldo.
*
* @param valueToDraw valor a ser sacado.
* @return valor do saldo apos o saque.
*/
public Double drawAndGetBalance(final Double valueToDraw) {
if (valueToDraw == null) {
throw new NullPointerException("É necessario informar o valor a ser sacado.");
}
if (valueToDraw.doubleValue() <= 0) {
throw new IllegalArgumentException("O valor do saque deve ser possitivo.");
}
synchronized (this.balance) {
if (this.balance.doubleValue() < valueToDraw.doubleValue()) {
// Alguma exception propria da camada de negocio informando que 'O valor do saque é maior que o
// saldo'...
}
return this.balance = this.balance - valueToDraw;
}
}
Ótima implementação, mas acho que esse synchronized não esta apropriado, neste momento return this.balance = this.balance - valueToDraw; antes de retornar outra thread poderia entrar no drawAndGetBalance, pois a trava usada é a do antigo this.balance e não do novo this.balance, logo após o método retorna um valor diferente ao chamador.
Hebert_Coelho
Ou então vc poderia criar usa própria exceção. Com isso, o seu sistema poderia trata-la como vc desejar.
thrownewValorInvalido("Favor digitar apenas número, e maior do que zero")
Lembre-se, ao utilizar um sistema que tenha um throw em runtime vc está utilizando a chamada programação Defensiva. Tem suas vantagens mas uma grande desvatagem é a poluição visual que seu código trará uma vez que para cada método chamado vc terá vários try/catch envolvido.
J
jgavazzisp
Na minha opinião não é necessário o uso de classes wrapper nesse caso, um tipo primitivo para o double já é suficiente, pois evitaria uma verificação a mais (valor == null).
A exceção mais apropriada é a IllegalArgumentException, não esqueçe de declarar um throws para ela pois ela é de runtime e não necessita de um tratamento obrigatório, porém é sempre bom deixar quem vai chamar o método ciente que algo pode acontecer.
Até mais.
Z111
jgavazzisp:
Na minha opinião não é necessário o uso de classes wrapper nesse caso, um tipo primitivo para o double já é suficiente, pois evitaria uma verificação a mais (valor == null).
A exceção mais apropriada é a IllegalArgumentException, não esqueçe de declarar um throws para ela pois ela é de runtime e não necessita de um tratamento obrigatório, porém é sempre bom deixar quem vai chamar o método ciente que algo pode acontecer.
Até mais.
Concordo em gênero, número de “degrau”…
lina
Oi,
Eu criaria uma exceção própria e a tratava.
Tchauzin!
Carlos_ds_jar
lina:
Oi,
Eu criaria uma exceção própria e a tratava.
Tchauzin!
Eu tambem faria isso, alguma coisa como ValorInválidoException :idea:
ViniGodoy
Por que você colocaria como parâmetro de entrada um Double ao invés do tipo primitivo double?
Se você não vai permitir nulos, então fazer isso não faz o menor sentido.