在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ FindBugs警告(may expose internal represent

FindBugs警告(may expose internal representation)

在編寫JavaBean時,如果類內(nèi)部的成員變量為一個對象類型,用FindBugs掃描后可能會產(chǎn)生如下警告:

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();  
        }  
    }  
}  

問題# 為什么要這樣做呢?在網(wǎng)上搜到了答案是:
生成的引用類型(Object、數(shù)組、Date等)的getter、setter方法會得到或通過對可變對象的引用操作而暴露代碼內(nèi)部實現(xiàn),解決方法很多,只要返回的或賦值的對象不是原引用對象即可。

其中 :生成的引用類型(Object、數(shù)組、Date等)的getter、setter方法會得到或通過對可變對象的引用操作而暴露代碼內(nèi)部實現(xiàn) ----- 這個暴露代碼內(nèi)部實現(xiàn)是什么意思?為什么調(diào)用setter,gettter會暴露代碼內(nèi)部實現(xiàn)呢?可以舉個例子嗎?

回答
編輯回答
醉淸風

暴露內(nèi)容實現(xiàn),可能會被意外修改,這與您的設(shè)計意圖可能不一致. 如:

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

StudentBean mybean;
...

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

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

2017年8月14日 13:15