软考软件设计师辅导:重写Java的时间和日期API

来源:微学教育网发布时间:2012-04-27

  最近Java.net的投票问题是:“在Java8中实现JSR-310(新的Java日期和时间API)有多么重要?”在这篇帖子发布的时候,对该话题已经有超过150条回应。其中“觉得非常重要”(53%),“重写当然更好,使用当前的API也不错”(22%)这两种观点以压倒性比例盖过了其他各种意见。

  显然,对于重写Java时间和日期API这件事情,有四分之三的回复者认为,“重写更好”或者“重写很重要”。我的观点同大多数人一样,我认为如下的说法并不为过:“Java当前的Date类和Calendar类提供的方法并没有和广大开发者一同进步。”到目前我感到最惊奇的就是,居然有2%的人选择了“我宁愿使用当前的时间和日期类”,我都不禁怀疑,是不是这些API的作者们投了这2%的票呢?

  我多次使用过Java的日期/时间/日历API。当我用它们的时候,我真的不喜欢它们,但是我强迫自己学会容忍他们。有的时候我甚至忘记了这些API有多么恶心,直到我再次使用他们为止。我最近帮助过我的一个熟悉Java(但是不熟悉时间和日期API)的同事,企图让他学会如何使用Date/Calendar/String类进行配置和显示。把这些乱七八糟的东西给他讲清楚是如此的困难,因为利用这些过于灵活的API写程序,对我自己来说本身就困难重重。从我同事的脸上,我看到了迷惑的表情,他一定认为我要么在跟他开玩笑,要么就是我自己都不明白自己在说什么。尽管我可以让这些API按照我的意图工作,但是其难度远远超出了其应有的水平。

  也有很多其他人表达了对使用Java时间/日期API所感到的痛苦。RobSanheim在2006年提出了时间和日期API的问题,并将其纳入“最烂的5个JavaAPI”的范畴(Calendar、Date和DateFormat/SimpleDateFormat)。2005年,CameronPurdy的文章《七个可能造成功能性障碍的设计习惯》,把Java的日期处理API推上了风口浪尖。TeroKadenius在2011年的文章《Java中的日期处理》再次提醒我们:“众所周知,使用Java时间日期API写程序是如此地痛苦。”2009年的一篇名为《Java日期如此糟糕》的帖子,可谓是名符其实。

  目前Java.net的调查结果应证了我的观点和大部分Java开发者是相同的。在阅读了大量的文章和博客后,我发现,绝大多数的Java开发这都迫切希望看到在Java中能出现一套更好的处理时间和日期的API。