gpt4 book ai didi

java - 最终字符串的最终数组仍然是可变的吗?

转载 作者:行者123 更新时间:2023-12-01 06:30:33 25 4
gpt4 key购买 nike

假设我有一个数组

public static final String[] fooArray ={ Foo.a, Foo.b, Foo.c };

其中 Foo.a b 和 c 是静态最终字符串。

我是否仍然可以执行类似 fooArray[0] = "taco"; 的操作,并以 { taco, Foo.b, Foo.c } 作为内容fooArray 的?

如果是这样,将数组设置为私有(private),并使用 Arrays.copyOf 复制数组的 getter 可以解决此问题吗?

最佳答案

final适用于数组引用,而不是其条目。仍然可以将不同的字符串写入其条目。

If so, would making the array private, and having a getter that makes a copy of the array using Arrays.copyOf solve this issue?

是的,防御性副本是处理此问题的相当标准的方法。

或者,根据您所概述的内容,您根本不需要数组,只需一个如下所示的 setter/getter :

public String[] getFooArray() {
return new String[] { Foo.a, Foo.b, Foo.c };
}

或者as jtahlborn commented ,使用不可修改的List<String> :

public static final List<String> fooArray;
static {
List<String> a = new ArrayList<>();
Collections.addAll(a, Foo.a, Foo.b, Foo.c);
fooArray = Collections.unmodifiableList(a);
}
// (There's probably some really nifty Java8 way to do that as a one-liner...

关于java - 最终字符串的最终数组仍然是可变的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29655828/

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