已检查或未检查的例外情况

Sco*_*ott 3 java runtime exception checked-exceptions

可能重复:
何时选择已检查和未检查的异常

你好!

所以,关于何时抛出已检查或未经检查的异常,我仍然感到很自在.我想知道其他人认为在这种情况下最合适的东西:

class Correlation<T>
{
    private final T object1, object2;
    private final double correlationCoefficient;

    public Correlation(T object1, T object2, double correlationCoefficient)
    {
        if(Math.abs(correlationCoefficient) > 1.0 || (object1.equals(object2) && correlationCoefficient != 1.0))
            throw new IllegalArgumentException();

        this.object1 = object1;
        this.object2 = object2;
        this.correlationCoefficient = correlationCoefficient;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,我想抛出一个运行时异常,因为我无法从用户传入错误数据的情况中轻松恢复.我想事先指出我无法控制传入的数据.如果可以,我会创建一个接口,保证构造函数中的条件为真.但是,这是已经计算出的相关性的便利类,因此我必须相信用户正在提供准确的信息.

好的,让我知道你们的想法!

ape*_*ins 6

我认为这是正确的回应.你正在有效地做屏障断言,即屏障检查,如果它们是错的,你就是拒绝创建实体.我会用java文档记录你可以抛出IllegalArgumentException,但是除此之外,它看起来是正确的.

Joshua Block提供了有关已检查和未检查异常的一些重要信息.基本前提是,除非您绝对希望有人检查异常,否则您应该抛出未经检查的异常.以这种方式思考会使一些编码和返回值复杂化,但通常它会使代码更清晰,更有效.对特殊情况使用例外,事情会更好地为您服务.

只需2美分.


编辑

为了清楚起见,这里有类似你应该拥有的java文档:

/**
 * <Something describing constructor, and what it does, ending with a period.>
 *
 * @param parameter <Describe the parameter - do one for each parameter of the constructor,
 *     and note which values may be illegal for that particular parameter.>
 * @throws IllegalArgumentException <the case for the illegal argument exception.>
Run Code Online (Sandbox Code Playgroud)