Java中的可变对象

时间:2015-05-18 20:30:06

标签: java mutable

我有三个问题:

1)Java中哪些对象是可变的(除了Date)?

2)虽然该类仍然是可变的,但不推荐使用某些Java版本的Date setter。这有什么意义?我的意思是他们不会删除setter因为客户端已经在使用它们,所以为什么要弃用它们呢?

3)如果不推荐使用Date上的setter,那么如何将一天添加到Date?有可能以非弃用的方式进行吗?我必须像这样使用日历吗?

Calendar instance = Calendar.getInstance();
        instance.set(1, 1);

3 个答案:

答案 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.Datejava.util.Calendar类。请改用new java.time classes