Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何激活eclipse java警告”;不必要的抛出异常声明“;没有假阳性?_Java_Eclipse_Exception - Fatal编程技术网

“如何激活eclipse java警告”;不必要的抛出异常声明“;没有假阳性?

“如何激活eclipse java警告”;不必要的抛出异常声明“;没有假阳性?,java,eclipse,exception,Java,Eclipse,Exception,我讨厌那些声明抛出异常的函数,这些异常在任何情况下都不是由这个函数抛出的。如果函数体中删除了throw语句,而没有将其从throws定义中删除,则重构中会发生这种情况 这就是为什么我激活了设置Java->编译器->错误/警告->不必要的代码->不必要的抛出异常声明 如果在接口或超级方法中定义了异常,则会导致误报警告。如果接口的实现A没有抛出一种异常类型,但实现B抛出了一种异常类型,eclipse将警告implementation A中不必要的声明。这同样适用于超级方法和重写方法。这就是为什么我

我讨厌那些声明抛出异常的函数,这些异常在任何情况下都不是由这个函数抛出的。如果函数体中删除了
throw
语句,而没有将其从
throws
定义中删除,则重构中会发生这种情况

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

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

在这里之前一切都很好。但我有奥波西特的案子。重写的方法抛出一个异常类型,该异常类型未在超级方法中使用。请参见以下示例:

class车辆{
受保护的int getStatus()引发GeneralException、StatusException{
抛出新的GeneralException(“仅超级类型中有一个异常类型”);
}
}
二等车{
@凌驾
受保护的int getStatus()引发GeneralException、StatusException{
抛出新的StatusException(“特殊情况,得到特殊处理”);
}
}
现在车辆中的StatusException在eclipse中发出警告


当然,有人可能会说这是糟糕的设计等等,但从实用的角度来看,这种情况会再次发生,而且很可能人们可以接受不改变体系结构,而只是简单地将新的异常类型添加到超级类型中但是在这种情况下如何消除误报警告?当然可以在javadoc中使用子选项,但这也会忽略大多数真正的误报。另一个选项是添加SuppressWarning注释“unused”,但其他用户可能会收到不必要的抑制警告。

就我个人而言,我会在警告设置下激活第二个选项:“忽略记录的异常…”,并记录以下内容:


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

好吧,有些人认为所有的异常都应该是未检查的异常……这是一个很好的观点。在我的案例中,我看不到检查异常的任何好处。但这是遗留代码,我不确定是否可以将所有内容更改为未检查。但这可能就是为什么它没有自己的子选项的原因,因为再也没有人使用选中的异常了?通俗易懂的“在重写和实现方法时忽略”是指该选项应该做您想要做的事情。也许是日食中的虫子?@Raedwald虽然我不是母语人士,但我不这么认为。这就是为什么我把所有这些解释放在这个问题上,因为从超级类型的角度来看,这是一个不同的情况。如果需要扫描超级类型中的所有实现,那么它也会影响性能。因此,可能需要启动一个功能请求来手动停用每个异常类型的警告,例如
@SuppressWarnings(“unused”)
可以在函数参数中执行的操作。但这不是一个eclipse特性请求,而是一个通用java(编译器),对吗?我自己在问题中提到了这个可能的解决方案,并描述了为什么它不适合我。尽管如此,如果我知道如何停止在javadoc中自动填充
@throws
,也就是说,如果我在函数之前输入
/**
,并点击enter,则所有当前可能的javadoc标记都会自动输入,我甚至会接受这种可能性。这就是为什么到处都有这样的记录,而且几乎毫无用处。。。
/**
 * @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");
}