如何激活eclipse java警告"不必要的抛出异常声明"而不会出现误报?

jan*_*jan 5 java eclipse exception

我讨厌声明抛出在任何情况下都不会被这个函数抛出的异常的函数.如果throw在函数体中删除语句而不从throws定义中删除语句,则会在重构中发生这种情况.

这就是为什么我激活设置Java - >编译器 - >错误/警告 - >不必要的代码 - >不必要的抛出异常声明.

在此输入图像描述

如果在接口或超级方法中定义了异常,则会导致误报警告.如果接口的实现A没有抛出一个异常类型,但实现B没有,eclipse会警告实现A中不必要的声明.这同样适用于super和overriden方法.这就是为什么我激活子选项"忽略覆盖和实现方法".

Perfeclty罚款直到这里.但我有相反的情况.重写的方法抛出异常类型,而不是在super方法中使用.看到这个最小的例子:

class Vehicle {
    protected int getStatus() throws GeneralException, StatusException {
        throw new GeneralException("One exception type in super type only");
    }
}

class Car extends Vehicle {
    @Override
    protected int getStatus() throws GeneralException, StatusException {
        throw new StatusException("Special case, that gets special handling");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,车辆中的StatusException在eclipse中被警告.

在此输入图像描述

当然有人可能认为这是糟糕的设计等,但从实用的角度来看,这将再次发生,并且很可能人们可以接受不改变架构,而只是简单地将新的异常类型添加到超类型.但是如何在这种情况下摆脱误报警告呢?当然可以使用javadoc的子选项,但这也会忽略大多数真正的正面命中.另一种选择是添加SuppressWarning注释"未使用",但其他用户可能会获得该抑制的不需要的警告.

Joa*_*uer 5

就我个人而言,我会激活警告设置下的第二个选项:“忽略记录的异常...”并只记录那些:

/**
 * @throws GeneralException when general stuff goes wrong
 * @throws StatusException when status stuff goes wrong
 */
protected int getStatus() throws GeneralException, StatusException {
    throw new GeneralException("One exception type in super type only");
}
Run Code Online (Sandbox Code Playgroud)

也许包括一个稍微有用的解释,但它基本上可以归结为这个。