FindBugs警告(may expose internal representation)

在编写JavaBean时,如果类内部的成员变量为一个对象类型,用FindBugs扫描后可能会产生如下警告:

com.digu.api.db.model.HuotuSnsUserModel.getAddDate() may expose internal representation by returning HuotuSnsUserModel.addDate

public class StudentBean   
{  
    private Date addDate;  
  
    public Date getAddDate()   
    {  
        return addDate;  
    }  
  
    public void setAddDate(Date addDate)   
    {  
        this.addDate = addDate;  
    }  
}  



为消除警告,可以进行如下修改:

 
public class StudentBean   
{  
    private Date addDate;  
  
    public Date getAddDate()   
    {  
        if (addDate == null)  
        {  
            return null;  
        }  
        return (Date)addDate.clone();  
    }  
  
    public void setAddDate(Date addDate)   
    {  
        if (addDate == null)  
        {  
            this.addDate = null;  
        } else {  
            this.addDate = (Date)addDate.clone();  
        }  
    }  
}  

问题# 为什么要这样做呢?在网上搜到了答案是:
生成的引用类型(Object、数组、Date等)的getter、setter方法会得到或通过对可变对象的引用操作而暴露代码内部实现,解决方法很多,只要返回的或赋值的对象不是原引用对象即可。

其中 :生成的引用类型(Object、数组、Date等)的getter、setter方法会得到或通过对可变对象的引用操作而暴露代码内部实现 ----- 这个暴露代码内部实现是什么意思?为什么调用setter,gettter会暴露代码内部实现呢?可以举个例子吗?

阅读 5.3k
1 个回答

暴露内容实现,可能会被意外修改,这与您的设计意图可能不一致. 如:

public class StudentBean   
{  
    private Date addDate;  
  
    public Date getAddDate()   
    {  
        return addDate;  
    }  
}

StudentBean mybean;
...

mybean.getDate().setTime(0);
//日期被改,虽然只提供的只读的getter方法

如果你不在乎, 也可以忽略.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题