数组初始值设定项不应静态初始化数组。为什么?

时间:2014-11-19 11:41:00

标签: java arrays static-analysis

这是Googles静态分析仪CodePro AnalytiX的规则之一:

摘要

数组初始值设定项不应静态初始化数组。

描述

此审核规则使用数组初始值设定项检查初始化的数组变量(在初始值设定项或赋值语句中)。

示例

由于使用了数组初始值设定项,因此将标记以下数组声明:

int[] values = {0, 1, 2};

现在,如果我不喜欢它,我可以禁用它,这不是问题。但我想知道为什么这会成为一个问题,以及保持代码不被审计规则标记的解决方案是什么?

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中非常清楚。