我正在尝试捕获由实体设置器引发的异常。
让我们说我有一个Player类,并且想要保存他的进度并拥有
private float progess
我希望它在0到1之间。我有二传手
public void setProgress(float progress){
if( progress < 0.0f || progress > 1.0f ) throw new IllegalArgumentException("progress parameter has to be between 0.0 and 0.1");
this.progress = progress;
}
我应该在哪里捕获此异常?我正在尝试使用
try{
playerDao.save(player)
}catch(IllegalArgumentException e){
...
}
但这并不能抓住它。我在哪里或如何捕获它,以便可以对其进行登录等等?感谢您的帮助。
答案 0 :(得分:0)
setter方法必须包装在try-catch块中,以便引发/捕获异常。例如:
float progress = 2F; // example to throw the exception
try
setProgress(progress);
} catch (IllegalArgumentException e) {
// if you're here, progress < 0 or progress > 1
// TODO handle the exception
}
也就是说,这的用例是什么?最好重构代码,使setProgress
方法只能接收有效的参数。例如:
float progress = 2F;
if (isValid(progress)) {
setProgress(progress);
} else {
// TODO show the user a message, etc.
}
...
private void isValid(float progress) {
return (progress >= 0F && progress <= 1F);
}
private void setProgress(float progress) {
this.progress = progress;
}