0

在我的 javadoc 注释中,我经常@throws为异常的子类添加注释,例如:

/**
 * My method.
 * @throws SubclassOfMyException when something specific happens
 * @throws MyException if any other error occurs
 */
public void myMethod() throws MyException {
    // ...
}

allowThrowsTagsForSubclassesCheckstyle 应该通过在 Javadoc Method 模块中设置来处理这种格式。但是,Eclipse Checkstyle Plug-in 经常(但不总是)将此类情况标记为错误。从命令行运行 checkstyle 不会将这些标记为错误。我正在使用 5.6.0.201209221626 版本的插件。

任何解决方法的建议?也许我可以改变我的文档风格?

4

2 回答 2

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 程序编写到工作区等等;超出了这个问题的范围)。

于 2013-06-23T21:05:46.270 回答
0

您可以在 Checkstyle 中允许子类抛出:

    <module name="RedundantThrows">
      <property name="allowSubclasses" value="true"/>
    </module>

并将您的方法签名更改为:

public void myMethod() throws SubclassOfMyException, MyException {

不过,有些人可能认为这是不好的代码风格。

于 2013-06-22T20:05:56.067 回答