如何获得一个c++指定的等同Java?
-
22-08-2019 - |
题
当我传递一个不可改变的类型对象(String,Integer,..)作为最后的方法我可以实现的C++定指针。但我怎么可以强制实施此类行为的对象是易变的?
public void someMethod(someType someObject){
/*
* code that modifies the someObject's state
*
*/
}
所有我想要的是防止someMethod修改国家的someObject没有作出任何改变someType.这可能吗?
解决方案
不,我不认为这是可能的。正常的做法是创建一个适配器SomeType在那里所有的方法改变的状态引发UnsupportedOperationException.这是使用通过例如爪哇。工具.集合。不可修改*功能。
有几种方法:
- 你可以让SomeType是一个接口,并且当你需要它是只读,只要创建一个包装,委托所有的阅读方法的原始对象和实现所有的写-方法扔一个例外。
- 或者你可以创建一个亚类的SomeType复盖所有的编写方法
这当然只得到你的运行时间检查,不compiletime.如果你想要汇编时,你可以让SomeType是一个接口(或超类)没有写方法,只阅读。
其他提示
在一般情况下,没有,这是不可能的。在非常有限的情况下,可以在提供相同的接口(见Collections.unmodifiableList()的例子)。
的一类包SOMETYPE然而,没有等同于“传递一个常量指针,编译器将只允许你调用它的const函数”。
没有,就不能防止通过其的setXXX()(或类似的)方法被修改的对象。你可以在克隆或它的一个副本手,虽然。
没有,这是不可能的。你必须要么通过在对象的副本,或者仅仅依靠知道什么行动,使状态变化的对象,避免调用它们 - 编译器不会帮你。
不隶属于 StackOverflow