捕获由实体的设置者抛出的异常

时间:2018-07-01 19:42:43

标签: java spring exception exception-handling

我正在尝试捕获由实体设置器引发的异常。

让我们说我有一个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){
    ... 
   }

但这并不能抓住它。我在哪里或如何捕获它,以便可以对其进行登录等等?感谢您的帮助。

1 个答案:

答案 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;
}