1

在方法调用中传递可变对象会将对象暴露给被调用者修改,这可能是也可能不是调用者的意图,如下例所示:

service.configure(parameters);

它可能 (1) 告诉服务“为自己配置这些参数”,或者它可能 (2) 要求服务“为我配置这些参数”。

在第一种情况下,您可以通过将保护性副本传递给服务来保护对象不被修改(在某些语言中,您可以按值传递它)。在第二种情况下,您故意传递对象以对其进行修改。有很多可能性,各有利弊,但清楚地记录你的意图总是有帮助的。

您是否知道将参数标记为“只读”或“允许修改”的注释?讨论已打开...

4

1 回答 1

0

借鉴jsr305 javax.annotation.concurrent.Immutable,我开始使用Mutable注解,意思是“这个对象要被修改”。没有与之关联的 findbugs 检查;它只是改进了文档。例子:

service.configure(@Mutable parameters);

现在您可以第一眼看到parameters正在更改的内容。

于 2013-04-15T14:55:57.707 回答