Jam*_*ven 11 java date java.util.date
是否有任何特定原因在API中使用Date类(例如,在员工出生日期字段中)而不是long或Long.
有一些关于这个的讨论: java-date-vs-calendar,但我想知道是否有任何理由使用Dates,当long(或Long)似乎更简单.
当然我会使用TimeZone和SimpleDateFormatter在GUI中解析和显示日期,也可能使用Calendar来执行操作,但我只关心这个问题中数据模型/ API中日期的存储和表示.
更新:我不选择Date的一个原因的例子是它是可变的.因此,如果我在API中公开Date,调用者可以调用setTime(long),这似乎违反了基本封装.对我而言,这似乎超过了使用Date提供的额外清晰度的好处,因为我可以调用long属性timeInMillisecondsSinceEpoch并将相同的信息传递给调用者.
如果您使用整数来表示API中的日期,那么您将添加一个额外的,不必要的复杂层,需要额外的文档并使您的API更难使用.
通过使用整数,您必须让客户端知道基准日期是什么,您正在测量什么(例如秒,毫秒,分钟等?)并强制客户端进行转换.在API中保留Date对象可以使IMO更简单,更友好.除非出于任何原因,否则会有非常严重的性能影响,我建议将日期保留在API中,即使您需要在内部进行更多编码.这是使一个好的API成为一个好的API的事情之一......不会让你的客户端跳过篮球.
该类Date是 API 的一部分,因此如果它符合您的目的,那么它是一个有效的选项。其中有许多已弃用的方法已被该类替换Calendar,因此请确保避免使用这些方法。
答案将取决于您需要完成什么。如果您只需要按日期排序,along就足够了。值Date会增加一些可读性,但不会增加更多功能。使用Date也不会有害,所以应该考虑可读性因素。
如果该字段是私有的,您实际上可以将其存储为 long 并拥有一个使用以下方法的 getter 和 setter Date:
private long mDOB;
public Date getDOB () { return new Date(mDOB);}
public void setDOB (Date dob) { mDOB = dob.getTime(); }
Run Code Online (Sandbox Code Playgroud)