这是来自Google静态分析器CodePro AnalytiX的规则之一:
概述
不应该使用数组初始化器对数组进行静态初始化。
描述
此审核规则检查使用数组初始化器对数组变量进行初始化(无论是在初始化程序中还是在赋值语句中)的情况。
示例
以下数组声明将被标记,因为使用了数组初始化器:
int[] values = {0, 1, 2};
现在,如果我不喜欢它,我可以禁用它,这不是问题。但我想知道为什么会有问题,以及避免该代码被审计规则标记的解决方案是什么?
这是来自Google静态分析器CodePro AnalytiX的规则之一:
概述
不应该使用数组初始化器对数组进行静态初始化。
描述
此审核规则检查使用数组初始化器对数组变量进行初始化(无论是在初始化程序中还是在赋值语句中)的情况。
示例
以下数组声明将被标记,因为使用了数组初始化器:
int[] values = {0, 1, 2};
现在,如果我不喜欢它,我可以禁用它,这不是问题。但我想知道为什么会有问题,以及避免该代码被审计规则标记的解决方案是什么?
这是一个有趣的问题,而且在我看来,这个决定是没有根据的。(如果这种设计决策背后有合法的原因,我希望其他人能够回答这个帖子)。
此外,Google在他们的良好实践格式指南中展示了如何格式化这些静态初始化器 https://google-styleguide.googlecode.com/svn/trunk/javaguide.html#s4.8.3.1-array-initializers,没有说使用这些构造的坏处...
我猜背后的那个人只是对这种编程风格有偏见:)
我想这是因为它是一种特殊的语法,只有在初始化 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代码风格指南并没有禁止这种初始化形式,在这个示例中非常清楚。
{values}
部分,但是new int[]{1,2,3}
仍然使用数组初始化器作为“数组创建表达式”的一部分”(https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.10)。问题是,分析器是否意味着相同的事情? - zapl