Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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
Java “解决方案”;AllowthrowstagsforSubclass“;Eclipse Checkstyle插件中的问题_Java_Eclipse_Checkstyle - Fatal编程技术网

Java “解决方案”;AllowthrowstagsforSubclass“;Eclipse Checkstyle插件中的问题

Java “解决方案”;AllowthrowstagsforSubclass“;Eclipse Checkstyle插件中的问题,java,eclipse,checkstyle,Java,Eclipse,Checkstyle,在我的javadoc注释中,我经常为异常的子类添加@throws注释,例如: /** * My method. * @throws SubclassOfMyException when something specific happens * @throws MyException if any other error occurs */ public void myMethod() throws MyException { // ... } Checkstyle应该通过在Ja

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

/**
 * My method.
 * @throws SubclassOfMyException when something specific happens
 * @throws MyException if any other error occurs
 */
public void myMethod() throws MyException {
    // ...
}
Checkstyle应该通过在Javadoc方法模块中设置
allowthrowstagsforsubclass
来处理这种格式。但是,Eclipse Checkstyle插件经常(但并非总是)将此类情况标记为错误。从命令行运行checkstyle不会将这些标记为错误。我正在使用插件的5.6.0.201209221626版本


有什么解决办法的建议吗?也许我可以更改文档样式?

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

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

有些人可能认为它是坏代码风格。

让我添加一些注释。在我的书中,设置允许子类是可以的。我甚至还允许声明运行时异常:


无论哪种方式,您都应该能够通过配置检查来满足原始场景。确保
allowUndeclaredrete
(这允许运行时异常出现在Javadoc
@throws
标记中,而无需在方法签名中声明)和
allowthrowstagsforsubclass
设置为
true
(您已经提到后者)

除此之外,还有
logLoadErrors
,如果无法加载相关异常,则可能会导致Checkstyle警告,如“无法获取类信息”。如果无法解决类路径问题(我不推荐这种解决方法,但它确实存在),您可能希望将其关闭。例如:


EclipseCheckStyle插件本身是非常可靠的,尽管我已经使用它很多年了,但它从来没有出现过任何严重的错误(缺少的功能是另一回事)。因此,上述配置确实应该有效

如果在那之后您仍然有问题,那么它与Checkstyle没有直接关系,而是与Eclipse或您对它的使用有关(例如,您的类路径是如何构建的,如果您有自定义构建器,如果您让非Eclipse程序写入工作区等等;超出了这个问题的范围)

public void myMethod() throws SubclassOfMyException, MyException {