如何在 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;
    }
    }

但是我认为克隆不是很好,因为没有必要复制数据。

  1. 数组

    与Collections.unmodifiableList()没有任何相似之处
    1. 我无法将方法 getAllPlatforms() 的 return 类型更改为某些

集合,因为它是一个接口方法

我不是 Java 大师,但我相信你在这里运气不好。除了创建 0 元素的数组之外,没有办法使原始数组不可变。

将其设置为 final 将无济于事,因为只有指向它的引用是不可变的。

正如您已经说过的,获得不可修改的 list 的方法是使用 Collections,如下例所示:

List<Integer> contentcannotbemodified= Collections.unmodifiableList(Arrays.asList(13,1,8,6));

希望对您有所帮助。