您的位置:首页 > Web前端

FindBugs分析记录May expose internal representation by returning reference to mutable ob

2017-08-03 10:43 621 查看
使用IDE的findbugs找到这么一个bug:May expose internal representation by incorporating reference to mutable object抛出潜藏bug的代码public class AlertCreateTaskRuleDTO extends BaseDTO {    public  String[] getAlertNameArray(){return this.alertNameArray;}    public  void setAlertNameArray(String[] names){this.alertNameArray = names;}}public class AlertCreateTaskRuleDTO extends BaseDTO {    public  String[] getAlertNameArray(){return this.alertNameArray.clone();}    public  void setAlertNameArray(String[] names){this.alertNameArray = names.clone();}}测试
public class test {
public static void main(String []args){
AlertCreateTaskRuleDTO  b = new AlertCreateTaskRuleDTO();
String[] values ={"11","22","333"};
b.setAlertNameArray(values);
values[0]="GAI";
System.out.print(b.getAlertNameArray()[0]);
}
}
输出结果为GAI原因:setter赋值是设置的数组的引用,一旦数组发生改变引用这个数组的地方都会改变getter获取的是数组的引用,自然获得的是数组更改后的值。
防止这种问题的方法是:设置、获得一个数组的拷贝,而不直接设置或者获得一个数组引用修改后:public class AlertCreateTaskRuleDTO extends BaseDTO {    public  String[] getAlertNameArray(){return this.alertNameArray.clone();}    public  void setAlertNameArray(String[] names){this.alertNameArray = names.clone();}}测试输出的结果为11
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐