arrays - 如何在java中创建一个只读数组?

标签 arrays clone

我想摆脱 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() 没有任何相似之处

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

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

最佳答案

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

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

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

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

希望对您有所帮助。

关于arrays - 如何在java中创建一个只读数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44584367/

相关文章:

Git 存储库中的 Git 存储库

C++ 返回一个数组

python - 如何计算大数组中字符串的某些元素?

c++ - C++11 数组怎么能不存储它的大小呢?

php __clone() 和 "shallow clone"

git clone 或通过慢速网络 pull 一个巨大的 repo 以致命的 EOF 结束

使用模板化类的 C++ 多态克隆。不能将克隆的对象用作函数中的参数

javascript - 克隆换行时如何防止字溢出?

javascript - 对 2 个数组进行排序/过滤

java - 一个数的除数列表