gpt4 book ai didi

java - 返回数组列表的常量引用

转载 作者:太空狗 更新时间:2023-10-29 22:53:08 24 4
gpt4 key购买 nike

我真的很欣赏 java 的特性,我不想放弃使用它来解决下一个问题:

我有一个可能被继承的类,里面有一个 private ArrayList arr;所以 setter 函数没问题,但是 getter 函数 return arr;返回对该变量的引用,任何人都可以编辑我不想要的整个数组,并且私有(private)的没有任何意义!

在 C++ 中,我只需要 return const arr;它将返回对变量的常量引用。

我非常需要变量不要被克隆或手动复制,因为有太多的计算需要(只读变量)为什么 java 中没有返回常量????有什么办法可以避免复制吗?

附注(final ArrayList<Integer> arr;)不是一个选项,因为数组总是改变大小或元素值。

如果我找不到解决办法,我威胁要回到 C++ 或公开一切,你永远不应该得到我的软件 :D


编辑:一个更重要的问题:我是否在要求一些不好的东西(软件工程方面)我的意思是如果 JAVA 创作者认为没有 const 引用(返回只读引用)那么我一定是在要求一些可以以其他方式处理。或者我的程序设计错误我很困惑。

最佳答案

java.util.Collections.unmodifiableList包裹返回值.它不复制数据,而是包装原始列表,并将只读操作委托(delegate)给基础列表。将修改列表的操作在运行时通过 UnsupportedOperationException 被拒绝。

你的

return arrayList;

成为

return Collections.unmodifiableList(arrayList);

不幸的是,编译器不会强制执行只读约束。但是,它们将在运行时强制执行。

您还可以使用:unmodifiableSet , unmodifiableMap , unmodifiableCollection , unmodifiableSortedSet , 和 unmodifiableSortedMap .如果这些还不够,您仍然可以从这种通用设计方法中汲取灵感,并创建您自己的自定义只读包装类。

关于java - 返回数组列表的常量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4262434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com