publicclassFormatadorDataCalendar{privateCalendardata;/** * Construtor que recebe uma data como parâmetro * @param data */publicvoidsetData(Calendardata){this.data=data;}/** * Converte e retorna uma data Calendar no formato String/br. Caso a data passada seja nula, retorna uma string vazia * @return String */publicStringgetDataStringBr(){StringdataString="";if(this.data!=null){intdia=this.data.get(Calendar.DAY_OF_MONTH);intmes=this.data.get(Calendar.MONTH);intano=this.data.get(Calendar.YEAR);StringdiaString=dia<10?"0"+dia:String.valueOf(dia);StringmesString=mes<10?"0"+mes:String.valueOf(mes);dataString=diaString+"/"+mesString+"/"+ano;}returndataString;}}
Gostaria da opinião de vocês no seguinte. Não sei se o correto seria o formatador retornar uma String vazia mesmo caso esteja tratando uma data nula ou se o correto seria o formatador forçar o tratamento de uma Exception na minha entidade. De que forma vocês fariam? Qual seria a forma correta?
Acho que esta correto a forma que você fez não encontrei problema, a unica coisa que talvez colocaria era no data != null && data != " "
Retornando null mesmo como voce fez acho que fica mais facil pra se trabalhar.
anderson_lr
Olhando alguns artigos, alguns citam que a forma correta seria deixar o tratamento da Exception pra quem a chamou, e ela decidir o que fazer com ela. Dessa forma:
/** * * @author anderson */publicclassFormatadorDataCalendar{privateCalendardata;/** * Construtor que recebe uma data como parâmetro * @param data */publicvoidsetData(Calendardata){this.data=data;}/** * Converte e retorna uma data Calendar no formato String/br. Caso a data passada seja nula, retorna uma string vazia * @return String */publicStringgetDataStringBr(){StringdataString="";intdia=this.data.get(Calendar.DAY_OF_MONTH);intmes=this.data.get(Calendar.MONTH);intano=this.data.get(Calendar.YEAR);StringdiaString=dia<10?"0"+dia:String.valueOf(dia);StringmesString=mes<10?"0"+(mes+1):String.valueOf(mes);dataString=diaString+"/"+mesString+"/"+ano;returndataString;}}
Seguinto essa filosofia. Criei o seguinte teste no JUnnit:
@Test(expected=NullPointerException.class)publicvoidtestGetDataDaCriacaoStringBrComDataNula(){System.out.println("getDataDaCriacaoStringBr");OrdemDeServicoinstance=newOrdemDeServico();when(formatadorDeData.getDataStringBr()).thenThrow(NullPointerException.class);Stringresult=instance.getDataDaCriacaoStringBr(formatadorDeData);fail("Deveria ter Lançado uma exception.");}
anderson_lr
O que acham?
surfzera
Isso concordo, é assim que eu também faço. Acho que é a melhor forma mesmo.
anderson_lr
O grande problema que vejo nisso, é que por NullPointerException ser unchecked, não tem como garantir que os métodos que chamam esse método getDataDaCriacaoStringBr tratem essa Exception.
LPJava
Anderson, crie sua propria exceção verificada então. Algo como DateException ou outro nome que queira chamar.
flw.
renanreismartins
Gostaria da opinião de vocês no seguinte. Não sei se o correto seria o formatador retornar uma String vazia mesmo caso esteja tratando uma data nula ou se o correto seria o formatador forçar o tratamento de uma Exception na minha entidade. De que forma vocês fariam? Qual seria a forma correta?
o formatador nao deve retornar String vazia pq o client do seu codigo espera uma string com a data formatada.
Neste caso vc poderia retornar null e seu cod. client trata isso (acho feio)
Ou lançar exception, porem apesa re-lançar como:
try {
....
catch(TipoEx ex) {
throw ex;
}
}
nao faz sentido algum…
Entao seguindo o conselho do LP vc pode relançar a sua propria ex checada, ou até mesmo nao checada.
abrasssss
peczenyj
por que razão o seu atributo seria nulo?
de repente vc poderia pensar em uma maquina de estados e se este atributo não foi setado ele esta em um estado invalido não sendo possivel fazer certas operacoes OU forçar que nunca esteja nesse estado (como setando um valor default para este atributo e nunca deixando ser setado null)