Orc*_*rch 0 java arrays string final
假设我有一个数组
public static final String[] fooArray ={ Foo.a, Foo.b, Foo.c };
Run Code Online (Sandbox Code Playgroud)
其中Foo.ab和c是静态最终字符串.
我仍然可以做这样的事情fooArray[0] = "taco";,并最终{ taco, Foo.b, Foo.c }为fooArray的内容是什么?
如果是这样,是否会将数组设为私有,并使用getter来生成数组的副本以Arrays.copyOf解决此问题?
所述final适用于数组引用,而不是它的条目.仍然可以将不同的字符串写入其条目.
如果是这样,将数组设为私有,并使用Arrays.copyOf创建数组副本的getter解决此问题?
是的,防御性副本是处理这种情况的一种相当标准的方法.
或者,根据您所概述的内容,您根本不需要使用数组,只需要一个看起来像这样的getter:
public String[] getFooArray() {
return new String[] { Foo.a, Foo.b, Foo.c };
}
Run Code Online (Sandbox Code Playgroud)
或者正如jtahlborn评论的那样,使用不可修改的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...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |