我有三个问题:
1)Java中哪些对象是可变的(除了Date)?
2)虽然该类仍然是可变的,但不推荐使用某些Java版本的Date setter。这有什么意义?我的意思是他们不会删除setter因为客户端已经在使用它们,所以为什么要弃用它们呢?
3)如果不推荐使用Date上的setter,那么如何将一天添加到Date?有可能以非弃用的方式进行吗?我必须像这样使用日历吗?
Calendar instance = Calendar.getInstance();
instance.set(1, 1);
答案 0 :(得分:2)
1)我想你的意思是那些可变的着名课程但不应该更好:例如Person.where(id: hsh.keys).map do |o|
[ o, hsh[o.id] ]
end.sort_by { |ar| ar[-1] }.reverse
和其他格式化程序,因为它们通常用作静态字段,可能由多个线程使用。即使没有明确地修改格式化程序,这也是一个错误,因为它保存了在调用解析或格式时修改的内部状态!
2)不推荐使用这些方法,以使人们意识到使用它们是邪恶的,并使编译器等工具能够检测不需要的使用方法。如果你不调用任何这些“邪恶”方法,SimpleDateFormat
实际上是不可变的,所以它是线程安全的(如果正确发布)。
3)从Java 8开始,您可以使用Date
:
java.time.LocalDate
在Java 8之前,使用LocalDate now = LocalDate.now();
LocalDate tomorrow = now.plus(1, ChronoUnit.DAYS);
:
Calendar
答案 1 :(得分:1)
1)ArrayList
:添加,删除,...
2)鼓励开发人员使用具有更好逻辑的库
3)你最好的选择可能是使用像Joda这样的库:new DateTime().plusDays(1);
答案 2 :(得分:1)
从Java 8开始,不应再使用java.util.Date
和java.util.Calendar
类。请改用new java.time classes。