这是Googles静态分析仪CodePro AnalytiX的规则之一:
摘要
数组初始值设定项不应静态初始化数组。
描述
此审核规则使用数组初始值设定项检查初始化的数组变量(在初始值设定项或赋值语句中)。
示例
由于使用了数组初始值设定项,因此将标记以下数组声明:
int[] values = {0, 1, 2};
现在,如果我不喜欢它,我可以禁用它,这不是问题。但我想知道为什么这会成为一个问题,以及保持代码不被审计规则标记的解决方案是什么?
答案 0 :(得分:16)
这是一个有趣的问题,这个决定毫无根据恕我直言。 (如果这个设计决定背后有合理的理由,我希望其他人会回答这个帖子。)
此外,Google还展示了如何在他们的良好实践格式指南https://google-styleguide.googlecode.com/svn/trunk/javaguide.html#s4.8.3.1-array-initializers中格式化这些静态初始化程序,而没有说明使用这些结构有多糟糕......
我猜这个规则背后的人只是反对这种编程风格:)
答案 1 :(得分:11)
我认为这是因为它是一种特殊的语法,只有在初始化values
时才有效。
int[] values = {1,2,3} //legal
int[] values2;
values2 = {1,2,3} //not legal
int [] values3;
values3 = new int[]{1,2,3} //legal
最后一种形式values3
在创建数组时或以后是合法的。因此,不要混合初始化数组的形式,而是总是使用相同的形式。恕我直言,使得代码更清晰,遵循最少惊喜的原则。
奇怪的是google code style does没有禁止这种形式的初始化,这在example中非常清楚。