我有三个问题:
1) Java 中哪些对象是可变的(Date 除外)?
2) 某些 Java 版本的日期 setter 已被弃用,尽管该类仍然是可变的。这有什么意义呢?我的意思是他们不会删除 setter,因为客户已经在使用它们,那么为什么要弃用它们呢?
3) 如果 Date 的 setter 已被弃用,如何在 Date 中添加一天?是否可以以不弃用的方式进行?我必须像这样使用日历吗?
Calendar instance = Calendar.getInstance();
instance.set(1, 1);
最佳答案
1)我想你的意思是著名的类是可变的,但最好不应该:例如SimpleDateFormat
和其他格式化程序,因为它们通常用作静态字段,可能由多个线程使用。即使未显式修改格式化程序,这也是一个错误,因为它保存调用解析或格式时修改的内部状态!
2) 这些方法已被弃用,以使人们意识到使用它们是邪恶的,并使编译器等工具能够检测到它们的不需要的使用。如果您不调用任何这些“邪恶”方法,Date
实际上是不可变的,因此它是线程安全的(如果发布正确)。
3) 从 Java 8 开始,您可以使用 java.time.LocalDate
轻松完成此操作:
LocalDate now = LocalDate.now();
LocalDate tomorrow = now.plus(1, ChronoUnit.DAYS);
在 Java 8 之前,使用日历
也很简单:
Calendar now = Calendar.getInstance();
Calendar tomorrow = (Calendar)now.clone();
tomorrow.add(Calendar.DATE, 1);
关于java - Java 中的可变对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30312281/