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,unmodifiableSortedSet和unmodifiableSortedMap.如果这些还不够,您仍然可以从这种通用设计方法中获取灵感,并创建自己的自定义只读包装类.
| 归档时间: |
|
| 查看次数: |
6016 次 |
| 最近记录: |