假设我有一个类Comment,我有一个名为commentDate的私有字段,它是一个java.util.Date,并带有一个名为getCommentDate的getter .
为什么最好返回该日期的副本(返回新日期(commentDate.getTime()))而不是简单地返回该日期...
用户如何更改该Date的对象状态,因为它是getter而不是setter?
Tap*_*ose 14
自java.util.Date实现以来,Cloneable您可以轻松克隆日期,如下所示:
public class DateTest {
private Date date;
public DateTest() {
}
public Date getDate() {
return (Date) date.clone();
}
public void setDate(Date date) {
this.date = (Date) date.clone();
}
}
Run Code Online (Sandbox Code Playgroud)
首先,请尽量避免使用getter和setter.如果你在同一个领域同时拥有它们,你几乎肯定会做错事.我不在乎Java专家告诉你什么.他们不知道他们在谈论什么.这不是OO的工作方式.OO不是将字段访问转换为方法调用的make-work项目.这实际上并没有封装任何东西.
也就是说:如果你自己返回日期,那么调用代码会引用你的日期对象,并且可以使用它的完整界面.由于日期是可变对象,因此界面包含可以更改对象状态的内容.由于引用是您的日期,您的日期状态将会更改.调用代码如何获得日期(即"带有getter")并不重要.
用户如何更改该Date的对象状态,因为它是getter而不是setter?
容易:
Comment comment = new Comment();
comment.getCommentDate().setTime(0); // now it's January 1, 1970 00:00:00 GMT.
Run Code Online (Sandbox Code Playgroud)