java - 抛出异常或返回值

标签 java exception coding-style

我的问题很简单。 我有一个叫做三角形的类(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/

相关文章:

Android NDK - 尝试用 NoMemoryError 捕获

multithreading - pthread_mutex_lock 返回未测试

Java - 存储一堆对象并稍后遍历它们的最有效方法,其中数量未知且顺序无关紧要?

java - JVM 可以看到多少代码?

c# - 如何检查某事是 .net 异常还是自定义异常

c - 在创建 typedef 结构时指定两种类型有什么好处?

vba - Word 2007 vba - 样式不通过宏应用

java - 无法执行 JDBC 批量更新

java - 如何在 Java 中杀死任务管理器?

java - 如果函数引发异常,如何避免返回值?