java - Java 中的可变对象

标签 java mutable

我有三个问题:

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/

相关文章:

ios - 代码/iOS : Simple example of a mutable C-Array as a class instance variable?

Java:按照另一个列表中对象的顺序迭代一个列表

java - JPA多对多关系查询问题

java - 配置 ReSTLet 以在 Google App Engine 上返回 JSP?

java - JSF ViewHandlerWrapper 导致 NullPointerException

rust - 克隆一个 mut 引用以便在其他地方使用 mut 引用

python:如何更改函数输入参数的值?

Python,可变对象作为默认参数,有什么办法解决吗?

rust - 在循环中发生变异时,可变借用时间过长

java - Android Dagger 2 不在 java/kotlin 项目中生成组件