【发布时间】:2013-04-09 12:24:20
【问题描述】:
在方法调用中传递可变对象会将对象暴露给被调用者修改,这可能是调用者的意图,也可能不是,如下例所示:
service.configure(parameters);
它可能 (1) 告诉服务“为自己配置这些参数”,或者它可能 (2) 要求服务“为我配置这些参数”。
在第一种情况下,您可以通过将保护性副本传递给服务来保护对象不被修改(在某些语言中,您会按值传递它)。在第二种情况下,您故意传递对象以对其进行修改。有很多可能性,各有利弊,但清楚地记录你的意图总是有帮助的。
您知道将参数标记为“只读”或“允许修改”的注释吗?已打开讨论...
【问题讨论】:
-
是的,将对象设计为不可变是一个好方法,遗憾的是它需要付出很大的努力,一旦完成很容易再次破坏。
标签: java design-patterns annotations findbugs