gpt4 book ai didi

java - "Public static final"安全漏洞的解决方案

转载 作者:行者123 更新时间:2023-12-02 01:21:14 25 4
gpt4 key购买 nike

这是java中的一个安全漏洞:

// Potential security hole!

static public final Thing[] VALUES = { ... };

通用的解决方案可以是

private static final String[] VALUES = { "a", "b" };   
public static final String[] values()
{
return VALUES.clone();
}

我认为克隆数组仍然允许修改内部值,为什么这被认为是可接受的解决方案?

最佳答案

它允许修改原始数组的副本内容。但原始数组没有被修改。

由于 values() 的每个调用者都会收到一个单独的副本,因此一个调用者修改其副本不会影响另一个调用者。

也就是说,您通常应该更喜欢集合而不是数组。并且集合可以变得不可修改,从而避免复制。

public static final List<Thing> VALUES = Collections.unmodifiableList(Arrays.asList(...));

但请注意,无论您选择哪种解决方案,如果 Thing 不是不可变的,任何人仍然可以修改事物的状态,而无需修改任何数组或列表。

关于java - "Public static final"安全漏洞的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57645100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com