我收到Sonar报告的以下违规行为:可能会通过返回对可变对象的引用来公开内部表示。
这是因为我从一个getter返回一个String []。
我知道问题是什么以及如何解决它但是通过stackoverflow上的几个线程我注意到,例如String []和Dates似乎发生了:
但是考虑到发生这种情况的原因,即返回对对象的引用,该对象的内部状态可以被调用者改变。是否应该为每个返回可变对象的getter引发违规行为?
例如:
public List<String> getList() { return list; }
public Foo getFoo() { return foo; } //where foo is just a random object with getters and setters...
调用者可以更改返回对象的状态。声纳不应该为那些报告相同吗?
非常感谢, 旧金山。
答案 0 :(得分:3)
声纳不够聪明,不知道物体是否可变。特别是如果您要返回List
,则无法确定您实际返回的内容是ArrayList
,ImmutableList
还是不可修改的列表。所以它不会发出任何警告,以避免误报你的误报。
Arrays和Date是众所周知的可变标准类,并且可以安全地发出此警告。