我有几个共享一个公共片段的长字符串常量(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
移动到“假定”的位置,则代码不会编译,因为在声明字段之前无法引用该字段。
对我而言,这似乎是规则中的一个错误,因为这是一个真正的语言限制,没有其他方法可以做到这一点。我认为规则应该排除这种情况。
你们是否同意或有没有办法在没有问题的情况下改进代码?
答案 0 :(得分:2)
这不是规则中的错误,而是规则的限制。只需使用这些问题中涵盖的技术来抑制警告:
您无法轻易更改该代码。你不想做什么hacky只是请checkstyle。
答案 1 :(得分:2)
你是对的,DeclarationOrder支票不包括你的情况。
这是对此检查的合理限制,因为Checkstyle专门处理源代码,因此没有可用的编译器信息。因此,虽然可以处理您的特定情况,但类似的其他情况会导致运行时类型解析和范围问题。换句话说,我真的不希望他们增强Checkstyle工具。
为了解决这个问题,您可以将检查ignoreModifiers
选项设置为true
,这将告诉Checkstyle忽略您的情况,同时仍然检查方法和构造函数是否在领域。这应该是合理的。
如果您无法更改规则(即通过公司限制)并且无法说服负责人,则可以将私有常量移至private static
内部类。这也会使违规行为消失,但当然会使你的代码变得更糟。 (这真的很难过。)