我有几个共享公共片段的长字符串常量(
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
移动到“应该”的位置,代码将无法编译,因为在声明字段之前无法引用该字段。
对我来说,这似乎是规则中的一个错误,因为这是真正的语言限制,并且没有其他方法可以做到这一点。我认为规则应该将这种情况排除在检查之外。
你们同意吗?或者有什么方法可以改进代码而不出现问题?
您是对的,DeclarationOrder 检查不涵盖您的案件。
这是对此检查的合理限制,因为 Checkstyle 仅适用于源代码,因此没有可用的编译器信息。因此,虽然可以处理您的特定情况,但类似的其他情况会导致运行时类型解析和范围界定问题。换句话说,我并不真的期望他们增强 Checkstyle 工具。
为了解决这个问题,您可以将检查的
ignoreModifiers
选项设置为 true
,这将告诉 Checkstyle 忽略您的情况,同时仍然检查方法和构造函数是否位于字段之后。这应该是合理的。
如果你无法改变规则(即通过公司限制)并且无法说服负责人,那么你可以将私有常量移至
private static
内部类。这也会使违规行为消失,但当然它会让你的代码变得更糟。 (这真的很难过。)
与其说这是规则中的错误,不如说是规则的限制。只需使用这些问题中涵盖的技术来抑制警告即可:
您无法轻易更改该代码。你不想为了取悦检查风格而做一些黑客行为。
对类或受影响的常量进行注释效果很好:
@SuppressWarnings(value = "DeclarationOrder")
其中
DeclarationOrder
是 checkstyle 模块名称