即使我没有返回原始数组而是它的克隆,下面的返回语句也会给我一个 Sonar 安全警告。
执行此操作的“正确”方法是什么?
public String[] getList() {
return list!=null? list.clone():null;
}
最佳答案
编辑了我之前的答案,发现了一些明显的错误:)
List.clone() 不起作用,因为它返回列表的浅拷贝。所以基本上它只是返回对原始列表的引用。我们不希望这里出现这样的情况。我们想要的是一个全新的数组,它没有返回相同的引用。 为此,最好的想法始终是创建一个新数组并运行一个 for 循环,如下所示:
String[] newArr = new String[list.length];
int i = 0;
for (String s : list) {
newArr[i++] = s
}
如果您想知道为什么会出现此问题,请参阅此 answer :)
关于java - 安全性 - 方法返回内部数组 - Sonar 安全警告 - 即使我返回克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29895191/