Checkstyle建议不可能不断的排序

时间:2014-06-17 17:11:59

标签: java checkstyle

我有几个共享一个公共片段的长字符串常量(static final变量)。该片段本身没有任何意义,因此我将其声明为“私有静态决赛”。

例如:

private static final XML_H = "<?xml ....";
public static final DOC_1 = XML_H + "<tag....";
public static final DOC_2 = XML_H + "<tag....";

现在我收到来自checkstyle的警告

Variable access definition in wrong order

来自声明顺序检查规则,即私人应该在公开之后出现。

如果我将XML_H移动到“假定”的位置,则代码不会编译,因为在声明字段之前无法引用该字段。

对我而言,这似乎是规则中的一个错误,因为这是一个真正的语言限制,没有其他方法可以做到这一点。我认为规则应该排除这种情况。

你们是否同意或有没有办法在没有问题的情况下改进代码?

2 个答案:

答案 0 :(得分:2)

这不是规则中的错误,而是规则的限制。只需使用这些问题中涵盖的技术来抑制警告:

您无法轻易更改该代码。你不想做什么hacky只是请checkstyle。

答案 1 :(得分:2)

你是对的,DeclarationOrder支票不包括你的情况。

这是对此检查的合理限制,因为Checkstyle专门处理源代码,因此没有可用的编译器信息。因此,虽然可以处理您的特定情况,但类似的其他情况会导致运行时类型解析和范围问题。换句话说,我真的不希望他们增强Checkstyle工具。

为了解决这个问题,您可以将检查ignoreModifiers选项设置为true,这将告诉Checkstyle忽略您的情况,同时仍然检查方法和构造函数是否在领域。这应该是合理的。

如果您无法更改规则(即通过公司限制)并且无法说服负责人,则可以将私有常量移至private static内部类。这也会使违规行为消失,但当然会使你的代码变得更糟。 (这真的很难过。)