好吧,标题说明了一切。
例如,我有一个 Employee 类
class Employee
{
private Date joinDate;
public Date getJoinDate()
{
return joinDate;
}
}
这里 getJoinDate 返回对内部 joinDate 对象的引用。当我在 FindBug 中分析我的代码时,它给了我一个“恶意代码漏洞”警告,因为“......可能会通过返回 ClassXYZ.pqrDate 来暴露内部表示”
因此,访问此 getter 的任何代码都有可能修改存储在实例之外的类的此实例中的日期。那么我应该使用复制构造函数吗
Q1。我是否应该编写复制构造函数(或遵循任何其他方法):
class Employee
{
private Date joinDate;
Employee(Employee e) //copy constructor
{
joinDate = e.joinDate;
}
public Date getJoinDate()
{
return joinDate;
}
}
Q2 如何为框架对象编写复制构造函数?我可以为我的业务对象定义复制构造函数,但不能为框架对象定义。我应该有一个通用的 util 类,所有方法都返回接受该实例的框架类的新实例吗?
class CopyConstructorUtil
{
public Date copyDate(Date date)
{
return new Date(date.getTime());
}
//....
}
Java Object 类也确实提供了所有类都继承的 clone()方法。但它返回对象。那么我应该简单地在吸气剂中进行铸造吗?:
class Employee
{
private Date joinDate;
public Date getJoinDate()
{
return (Date)joinDate.clone();
}
}
Q3。哪种方法更可取?还是我应该使用任何其他方法?