我有一个方法,其中我直接将方法参数赋值给类变量。
public void sample(String[] targets)
{
this.objects = Targets;
}
我发现的一个解决方案是使用Arrays.copy(目标)创建一个新的数组副本。但我担心这是否会影响系统的性能。
我有两个问题:
首先,如果我使用Arrays.copy(),影响有多大。
如果影响很大(如果阵列长度很长),那么是否有其他解决方案来修复此声纳问题而不影响性能。
答案 0 :(得分:2)
Sonar提示建议你制作给定数组的defensive copy。一般来说,您应该遵循该建议,否则,您的代码可能会产生错误,这些错误是由不需要的side-effects引起的,因此难以本地化。
通常,防御性复制对性能的影响是可以忽略的,因为它的开销不明显。对于反对防御性副本的决策更重要的是它对代码质量的其他方面的影响,例如可读性,可用性和稳定性。
只要不经常调用sample()
,您就不需要犹豫制作数组副本。