返回arraylist的const引用

Ism*_*ush 15 java performance return const-reference

我真的很佩服java功能,我不想放弃使用它来解决下一个问题:

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

在C++中,我只是return const arr;会返回对变量的常量引用.

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

ps (final ArrayList<Integer> arr;)不是一个选项,因为该数组总是更改大小或元素值.

如果我找不到解决方法,我威胁要回到C++或公开所有内容,你永远不应该得到我的软件:D


编辑:一个更重要的问题:我要求的东西不好(软件工程明智)我的意思是如果JAVA创建者认为没有const引用(返回只读引用)那么我必须要求可以在其他地方处理的东西办法.或者我的程序设计错了我很困惑.

Mik*_*ark 23

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

您的

return arrayList;
Run Code Online (Sandbox Code Playgroud)

return Collections.unmodifiableList(arrayList);
Run Code Online (Sandbox Code Playgroud)

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

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