当我传递一个不可改变的类型对象(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()(或类似的)方法被修改的对象。你可以在克隆或它的一个副本手,虽然。

没有,这是不可能的。你必须要么通过在对象的副本,或者仅仅依靠知道什么行动,使状态变化的对象,避免调用它们 - 编译器不会帮你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top