我的问题很简单。 我有一个叫做三角形的类(class)。这个类有一个方法;
public boolean isAnyAngleGreaterThan(double deg);
我的问题如下:
如果 'deg' 不在 0 < 'deg' < 180 范围内,我是否应该抛出非法参数异常,或者如果 deg <= 0,我应该简单地返回 TRUE,如果 deg >= 180,我应该返回 FALSE?强>
或者哪一个是最优选的?
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;
}
2
public boolean isAnyAngleGreaterThan(double deg) {
return Double.compare(aDeg, deg) > 0
|| Double.compare(bDeg, deg) > 0
|| Double.compare(cDeg, deg) > 0;
}
其中“aDeg”、“bDeg”和“cDeg”是三角形中的角 a、b 和 c。
最佳答案
我从对象的名称推测该对象旨在表示一个三角形。因此,它将驻留在代码中通常称为模型的区域中,该区域通常包含系统的状态。
因此,我几乎从不在这里执行有效性检查。参数验证应在尽可能最浅的级别进行,即尽可能靠近输入/读取值的位置。这是Fail Fast范例。
这是一个核心对象。它不应该负责参数检查,就像它不应该负责结果访问的安全性或返回结果的加密一样。
只有当某些参数可能导致其他问题时,您才应该验证模型代码中的参数。在您的情况下,由于您所比较的只是其他 double
值,那么应该不会有任何问题。
例如,如果要执行的某些计算可能会导致异常(例如被零除)或其他不良影响,那么在这种情况下,快速失败
是正确的> 并检查零值并抛出异常。
关于java - 抛出异常或返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45858282/