为什么java.util.Date的setTime()方法没有被弃用?

4

所有其他的变异器在JDK 1.1中都已过时,那么为什么setTime()保持不变呢?毫无疑问,java.util.Calendar - 操作日期的正确方式 - 可以使用java.util.Date(long)构造函数根据需要创建java.util.Date实例。


我真的希望日期是不可变的。 - Steve Kuo
你不必使用它,你知道的。有更好的替代方案。 - skaffman
1
@skaffman。如果你正在使用java.sql.*的话,java.sql.Timestamp成为java.util.Date的子类也是另一个可怕的错误。 - Alexander Pogrebnyak
1
当您使用java.sql日期类时,可以将它们的使用限制在局部变量中,这样至少可以将它们的糟糕程度限制在一小段私有代码中。 - skaffman
3个回答

7

Date 类中被弃用的部分是与日历相关的部分(例如,日、月、年等)。需要注意的是,日历字段的访问器方法也被弃用了,而不仅仅是修改器。

然而,Date 以毫秒值表示的方式仍然有效,与日历表示无关,因此仍未被弃用。


4
其他的变异体试图将java.util.Date作为日历使用,而不是作为自1970年1月1日UTC时间12:00以来的毫秒数的一个瞬间。因此,那一个变异体不被弃用是有道理的。
当然,Date/Calendar API仍然很糟糕,您应该尽可能使用Joda Time - 但我可以理解为什么那个调用没有被弃用。事实上,您无法在事后使类型不可变,这也不是弃用的重点 - 弃用的重点是试图阻止人们将其用作“1976年6月19日”等存储的方式。

2
因为 `setTime` 方法至少在逻辑上是正确的:接受参数为 `day`、`month` 等的 `setX` 方法没有意义:Java 的 `Date` 类型代表的是时间点,因此 `day`、`hour`、`month` 等属性仅与该时间点在特定时区下的表示有关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接