【发布时间】:2018-04-28 04:08:22
【问题描述】:
FindBugs 提出了一个名为 EI_EXPOSE_REP 的错误,其描述如下:
EI:可能通过返回对可变对象的引用来公开内部表示
返回对存储在对象字段之一中的可变对象值的引用会公开对象的内部表示。如果实例由不受信任的代码访问,并且对可变对象的未经检查的更改会危及安全性或其他重要属性,则您将需要做一些不同的事情。在许多情况下,返回对象的新副本是一种更好的方法。
class Person {
private String[] hobbies;
String[] getHobbies(){ return hobbies;}
void setHobbies(String[] hobbies){ this.hobbies = hobbies;}
}
我知道一些解决办法:
- getHobbies(){return hobbies.clone();}
- 使用列表代替数组;
我想知道的是为什么只是数组会引发这个错误,而列表没有这个问题?为什么数组与其他集合如此不同?
【问题讨论】:
-
我不确定为什么您没有收到相同的列表警告,因为列表也是可变的。