【问题标题】:How to create a read-only array in java?如何在java中创建一个只读数组?
【发布时间】:2017-11-18 22:38:00
【问题描述】:

我想摆脱 clone() 方法。

对于下面的类声纳(静态代码检查工具)抱怨说 我不应该直接公开对象的内部数组,因为可以在方法调用之后更改数组,从而更改对象的状态。它建议在返回之前对该数组进行 clone(),这样对象的状态就不会改变。

下面是我的课...

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() for array

    1. 我无法将方法 getAllPlatforms() 的返回类型更改为 some

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

【问题讨论】:

    标签: arrays clone


    【解决方案1】:

    我不是 Java 专家,但我非常有信心您在这里不走运。除了创建0 元素的数组之外,没有办法使原始数组不可变。

    将其设为final 无济于事,只会导致指向它的引用是不可变的。

    正如您已经说过的那样,获取不可修改的列表的方法是使用Collections,如下例所示:

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 2019-10-10
      • 2022-01-02
      相关资源
      最近更新 更多