如何在 java 中创建一个只读数组?
How to create a read-only array in java?
我想摆脱 clone() 方法。
对于下面的 class 声纳(静态代码检查工具)抱怨说
我 不应该直接公开对象的内部数组 因为可以在方法调用之后更改数组,从而改变对象的状态。它建议在 returning 之前对该数组进行 clone() 操作,这样对象的状态就不会改变。
下面是我的class...
class DevicePlatformAggregator implements IPlatformListings{
private DevicePlatform[] platforms = null;
public DevicePlatform[] getAllPlatforms() throws DevicePlatformNotFoundException {
if (null != platforms) {
return platforms.clone();
}
List<DevicePlatform> platformlist = new ArrayList<DevicePlatform>();
..... // code that populates platformlist
platforms = platformlist.toArray(new DevicePlatform[platformlist.size()]);
return platforms;
}
}
但是我认为克隆不是很好,因为没有必要复制数据。
数组
与Collections.unmodifiableList()没有任何相似之处
- 我无法将方法 getAllPlatforms() 的 return 类型更改为某些
集合,因为它是一个接口方法
我不是 Java 大师,但我相信你在这里运气不好。除了创建 0
元素的数组之外,没有办法使原始数组不可变。
将其设置为 final
将无济于事,因为只有指向它的引用是不可变的。
正如您已经说过的,获得不可修改的 list 的方法是使用 Collections
,如下例所示:
List<Integer> contentcannotbemodified= Collections.unmodifiableList(Arrays.asList(13,1,8,6));
希望对您有所帮助。
我想摆脱 clone() 方法。
对于下面的 class 声纳(静态代码检查工具)抱怨说 我 不应该直接公开对象的内部数组 因为可以在方法调用之后更改数组,从而改变对象的状态。它建议在 returning 之前对该数组进行 clone() 操作,这样对象的状态就不会改变。
下面是我的class...
class DevicePlatformAggregator implements IPlatformListings{
private DevicePlatform[] platforms = null;
public DevicePlatform[] getAllPlatforms() throws DevicePlatformNotFoundException {
if (null != platforms) {
return platforms.clone();
}
List<DevicePlatform> platformlist = new ArrayList<DevicePlatform>();
..... // code that populates platformlist
platforms = platformlist.toArray(new DevicePlatform[platformlist.size()]);
return platforms;
}
}
但是我认为克隆不是很好,因为没有必要复制数据。
数组
与Collections.unmodifiableList()没有任何相似之处- 我无法将方法 getAllPlatforms() 的 return 类型更改为某些
集合,因为它是一个接口方法
我不是 Java 大师,但我相信你在这里运气不好。除了创建 0
元素的数组之外,没有办法使原始数组不可变。
将其设置为 final
将无济于事,因为只有指向它的引用是不可变的。
正如您已经说过的,获得不可修改的 list 的方法是使用 Collections
,如下例所示:
List<Integer> contentcannotbemodified= Collections.unmodifiableList(Arrays.asList(13,1,8,6));
希望对您有所帮助。