在方法调用中传递可变对象会将对象公开给被调用者进行修改,这可能是也可能不是调用者的意图,如下例所示:
service.configure(parameters);
它可以(1)告诉服务“用这些参数配置自己”,或者它可以(2)询问服务“为我配置这些参数”。
在第一种情况下,您可以通过将保护副本传递给服务来保护对象不被修改(在某些语言中,您可以通过值传递它)。在第二种情况下,您故意传递该对象以便对其进行修改。有许多可能性,都有其优点和缺点,但它总是有助于清楚地记录您的意图。
您是否知道将参数标记为“仅供读取”或“允许修改”的注释?讨论已打开...
答案 0 :(得分:0)
针对来自jsr305的javax.annotation.concurrent.Immutable
,我开始使用Mutable
注释,这意味着“要修改此对象”。没有与它相关的findbugs检查;它只是改进了文档。例如:
service.configure(@Mutable parameters);
现在,您可以乍一看parameters
可能会被更改。