Java 抛出异常或返回值
我的问题很简单。 我有一门课叫三角形。这个类有一个方法Java 抛出异常或返回值,java,exception-handling,coding-style,Java,Exception Handling,Coding Style,我的问题很简单。 我有一门课叫三角形。这个类有一个方法 public boolean isAnyAngleGreaterThan(double deg); 我的问题如下: 如果'deg'不在0
public boolean isAnyAngleGreaterThan(double deg);
我的问题如下:
如果'deg'不在0<'deg'<180范围内,我应该抛出illegalArgumentException吗?如果deg=180,我应该简单地返回TRUE吗?
或者哪一个是最好的
1
public boolean isAnyAngleGreaterThan(double deg) {
if (Double.compare(0, deg) >= 0) {
throw new IllegalArgumentException("Angle (deg) can't be negative.");
} else if (Double.compare(180, deg) <= 0) {
throw new IllegalArgumentException("Angle (deg) can't be greater or equal than 180.");
}
return Double.compare(aDeg, deg) > 0
|| Double.compare(bDeg, deg) > 0
|| Double.compare(cDeg, deg) > 0;
}
其中“aDeg”、“bDeg”和“cDeg”是三角形中的角度a、b和c。一般规则是:不要使用异常作为流量控制
因此:
- 如果该方法的结果导致其他结果,然后稍后抛出异常,则应返回
布尔值
- 如果此方法的结果用于确定是否需要抛出异常,则该方法可以抛出异常本身(应该是
)void
- 如果该方法的结果导致其他结果,然后稍后抛出异常,则应返回
布尔值
- 如果此方法的结果用于确定是否需要抛出异常,则该方法可以抛出异常本身(应该是
)void
true
/false
值。但是,如果使用用户定义的参数调用此函数,则可能会使验证/错误反馈更容易返回指示参数无效的异常
这确实是你的语义/个人偏好的问题。这实际上取决于你想要你的函数做什么 就个人而言,你的函数意味着一个基本的检查——三角形是否有任何角度大于参数。这并不表示角度有限制,因此只应返回
true
/false
值。但是,如果使用用户定义的参数调用此函数,则可能会使验证/错误反馈更容易返回指示参数无效的异常
这确实是你的语义/个人偏好的问题。这实际上取决于你想要你的函数做什么 如果度小于或等于0,您可能会抛出
IllegalArgumentException
,如果度大于180,则返回false
前者的原因是多边形中的角度在数学意义上总是正的。后者的原因是多边形的角度可能大于180,当然不是三角形,但在一般数学意义上,角度大于180度是有效的。如果角度小于或等于0,则可能抛出
IllegalArgumentException
,如果角度大于180,则返回false
前者的原因是多边形中的角度在数学意义上总是正的。后者的原因是多边形的角度可能大于180度,当然不是三角形,但从一般数学意义上讲,角度大于180度是有效的。我从物体的名称推测,这个物体是用来表示三角形的。因此,它将驻留在通常称为
模型的代码区域中,该区域通常包含系统的状态
因此,我几乎从不在这里执行有效性检查。参数验证应尽可能在最浅的位置进行,即尽可能靠近输入/读取值的位置。这就是范式
这是一个核心对象。它不应负责参数检查,正如它不应负责访问结果的安全性或对其返回的结果进行加密一样
只有在某些参数可能导致其他问题时,才应该验证模型代码中的参数。在您的情况下,由于您所比较的是其他双值
值,因此应该没有任何问题
例如,如果要执行的某些计算可能会导致异常(如被零除)或其他不良影响,那么在这种情况下,快速失败并检查零值并引发异常是正确的。根据对象的名称,我推测此对象旨在表示三角形。因此,它将驻留在通常称为模型的代码区域中,该区域通常包含系统的状态
因此,我几乎从不在这里执行有效性检查。参数验证应尽可能在最浅的位置进行,即尽可能靠近输入/读取值的位置。这就是范式
这是一个核心对象。它不应负责参数检查,正如它不应负责访问结果的安全性或对其返回的结果进行加密一样
只有在某些参数可能导致其他问题时,才应该验证模型代码中的参数。在您的情况下,由于您所比较的是其他双值
值,因此应该没有任何问题
例如,如果要执行可能导致异常的某些计算(例如除以零)或者其他一些不良影响,在这种情况下,正确的做法是快速失败,检查零值并抛出异常。如果你想继续你的流程,你可以返回布尔值,否则你需要停止,你可以抛出异常,处理异常是一项非常繁忙的任务。异常通常由开发人员和handl抛出
public boolean isAnyAngleGreaterThan(double deg) {
return Double.compare(aDeg, deg) > 0
|| Double.compare(bDeg, deg) > 0
|| Double.compare(cDeg, deg) > 0;
}