在我的javadoc评论中,我经常对异常的子类提出@throws
条评论,例如:
/**
* My method.
* @throws SubclassOfMyException when something specific happens
* @throws MyException if any other error occurs
*/
public void myMethod() throws MyException {
// ...
}
Checkstyle应该通过在Javadoc方法模块中设置allowThrowsTagsForSubclasses
来处理这种格式。但是,Eclipse Checkstyle插件经常(但并不总是)标记错误等情况。从命令行运行checkstyle不会将这些标记为错误。我使用的是插件版本5.6.0.201209221626。
有关解决方法的任何建议吗?也许我可以改变我的文档风格?
答案 0 :(得分:2)
让我补充几点。在我的书中设置RedundantThrows以允许子类是可以的。我甚至会允许声明运行时异常:
<module name="RedundantThrows">
<property name="allowUnchecked" value="true"/>
<property name="allowSubclasses" value="true"/>
</module>
无论哪种方式,您都应该通过配置JavadocMethod检查来满足原始方案。确保allowUndeclaredRTE
(允许运行时异常出现在Javadoc @throws
标记中而不在方法签名中声明)并且allowThrowsTagsForSubclasses
设置为true
(您已经提到过)后者)。
除了这些之外,还有logLoadErrors
,如果无法加载有问题的异常,可能会导致像“无法获取类信息”之类的Checkstyle警告。如果无法解决类路径问题,可能需要关闭它(我不推荐的解决方法,但它存在)。例如:
<module name="JavadocMethod">
<property name="allowUndeclaredRTE" value="true"/>
<property name="allowThrowsTagsForSubclasses" value="true"/>
<property name="logLoadErrors" value="false"/>
</module>
Eclipse Checkstyle插件非常可靠,虽然我已经使用它多年,但它从未表现出任何严重的错误(缺少的功能是另一回事)。所以上面的配置确实应该有效。
如果你之后仍然遇到问题,那么它与Checkstyle没有任何关系,而是与Eclipse或你的使用相关(比如你的类路径是如何构建的,如果你有自定义构建器,如果你让非Eclipse程序写入工作空间等等;超出此问题的范围。)
答案 1 :(得分:0)
你可以在Checkstyle中允许子类抛出:
<module name="RedundantThrows">
<property name="allowSubclasses" value="true"/>
</module>
并将您的方法签名更改为:
public void myMethod() throws SubclassOfMyException, MyException {
但有些人可能会认为它的代码风格不好。