写了一段java代码,然后用静态检查工具做了检查,报错了,不知道什么原因,红色的是报错信息,意思是将引用值赋值给可变对象,请教各位大侠错误原因和如何修改~~
public class EPGSyncLabel {
private String country_id;
private Date last_sync_time;
private int total_num;
private int is_auto_sync;
private String domain;
public String getCountry_id() {
return country_id;
}
public void setCountry_id(String country_id) {
this.country_id = country_id;
}
public Date getLast_sync_time() {
CID 268268: EI: Exposes internal representation (FB.EI_EXPOSE_REP) [select defect]
return last_sync_time;
}
public void setLast_sync_time(Date last_sync_time) {
CID 268273: EI2: Storing reference to mutable object (FB.EI_EXPOSE_REP2)At (1): com.samsung.awaken.mywork.pojo.EPGSyncLabel.setLast_sync_time(Date) may expose internal representation by storing an externally mutable object into EPGSyncLabel.last_sync_time
this.last_sync_time = last_sync_time;
}
------解决方案--------------------
分析:
上述findbugs的bug常出现在JavaBean中的setXXX(Object)、getXXX()、构造方法等中,原因都是一个,类似数组、Date等和其他所有java对象一样传递的都是引用,当你外部改变了这些引用值的时候,显然会影响使用这些引用的JavaBean。
解决:
所有的对象型如数组、Date等都人为采用传值(并增加空逻辑判断)。
Java代码 收藏代码
public Date getDate() {
if(date == null) {
return null;
}
return (Date) date.clone();
}
public void setDate(Date date) {
if(date == null) {
this.date = null;
}else {
this.date = (Date) date.clone();
}
}