我最近继承的应用程序充满了关于构造函数的弃用警告:
Date d = new Date(int year, int month, int day)
有没有人知道或可以指出为什么像这样简单的东西被这样“替换”的原因:
Date d = null;
Calendar cal = GregorianCalendar.getInstance();
cal.set(1900 + year, month, day);
d = cal.getTime();
现在,显然弃用警告本身不是问题,但你能想象如果这个构造函数被删除,数百万的 LOC 会痛苦地哭泣吗?
在我简短的基准测试中,后者需要大约 50% 的时间来执行。
最佳答案
最初,Date
旨在包含有关日期的所有逻辑,但 API 设计者最终意识到他们迄今为止所拥有的 API 严重不足,无法干净地扩展以正确处理诸如此类的问题作为时区、语言环境、不同的日历、夏令时等。
因此他们创建了 Calendar
来处理所有这些复杂性,并将 Date
降级为简单的时间戳,弃用其处理格式化、解析和单个日期字段的所有功能.
顺便说一句,在内部,这些方法,例如 Date(int, int, int)
构造函数现在调用 Calendar
,所以如果您发现速度有所不同,那么您就是调用 Calendar
时出错。
底线:不是 Java 的 Calendar
API 过于复杂,而是人类对日期的概念,而 Calendar
的唯一问题是它提供的最常见用法的快捷方式。
关于java - 为什么不推荐使用 "new Date(int year, int month, int day)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/460423/