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

Dav*_*vor 33 java arrays static-analysis

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

摘要

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

描述

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

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

int[] values = {0, 1, 2};
Run Code Online (Sandbox Code Playgroud)

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

Loï*_*oni 16

这是一个有趣的问题,这个决定毫无根据恕我直言.(如果这个设计决定背后有合理的理由,我希望其他人会回答这个问题).

此外,Google还展示了如何在他们的良好实践格式指南https://google-styleguide.googlecode.com/svn/trunk/javaguide.html#s4.8.3.1-array-initializers中格式化这些静态初始化程序,而没有说明如何糟糕的是使用这些结构......

我猜这个规则背后的人只是反对那种编程风格:)

  • 我不否认,我将其作为答案发布,因为它比评论更具可读性.此外,我猜想只有一个人可以推测这一点,因为我没有找到任何来源解释该决定的原因. (3认同)
  • 我的观点是,因为谷歌实际上已经指定初始化数组应该这样做,根据他们的指导方针,OP:s问题"这将是一个问题..."得到解答.Google认为没问题,但在CodePro AnalytiX中实施了可选规则.所以我把这个答案给了我+1. (2认同)

Dan*_*roa 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
Run Code Online (Sandbox Code Playgroud)

最后一种形式values3是合法的,在创建数组时或以后.因此,不要混合初始化数组的形式,而是总是使用相同的形式.恕我直言,使更清晰的代码,遵循最少惊喜的原则.

奇怪的是,谷歌代码风格并没有禁止这种形式的初始化,这在本例中非常清楚.