我最近继承的应用程序关于构造函数的弃用警告已满:
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
是,它没有提供大多数常用用法的快捷方式。
问题内容: 根据doc,日历set()为: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#set%28int,%20int,%20int%29 码: 输出: 为什么不是1月30日??? 问题答案: 1月是2月。2月30日更改为3月1日。您应该将月份设置为0。最好是使用Calendar中定义的常量:
问题内容: 我对为什么Integer和int可以在Java中互换使用感到困惑,即使一个是原始类型,而另一个是对象也是如此? 例如: 要么 问题答案: 发布的文章的前几句话很好地描述了它: 您不能将int(或其他原始值)放入集合中。集合只能容纳对象引用,因此您必须将原始值装箱到适当的包装器类中(在int情况下为Integer)。当您从集合中取出对象时,您将得到放入的Integer。如果需要一个int
问题内容: 如何从Date对象()中将月份作为整数? 问题答案: 您还可以使用Java 8中的java.time包并将您的对象转换为对象,然后仅使用方法。 请注意,此处的月份值是1到12,与adarshr的答案相反,月份值是0到11。 但是正如Basil Bourque在评论中所说,首选方法是使用该方法获取枚举对象。
问题内容: 任何数据类型的上限(不包括)总是比下限的绝对值小1。 例如,an的上限为2,147,483,647,ABS(下限)= 2,147,483,648。 是否有理由总是总是比负整数多一个负整数? 编辑:更改,因为问题与数据库不直接相关 问题答案: 您提供的类型是有符号整数。让我们来看一个字节(8位)的示例。使用1字节,您可以使用组合来存储256个可能的数字。 现在,您要具有相同数量的正数和负
问题内容: 在Java中,hashcode()方法返回整数而不是long。有什么具体原因吗? 问题答案: 那么,一个良好的理由是,基于数据结构(,)使用一个数组来存储箱,并且阵列被限制为索引。 如果必须将其映射到数组索引,那么您将一无所获。
问题内容: 我到处都读到过,当您在Java中定义介于-128到127之间的Integer时,它不会创建新对象,而是返回已经创建的对象。 除了让新手程序员比较Integer对象以查看它们是否具有相同的数字外,我看不到这样做的任何意义,但是我认为这很糟糕,因为确保他们认为可以将任何Integer对象与进行比较,并且还在教学在任何编程语言中都不好的做法:将两个“不同”对象的内容与进行比较。 这样做有其他