gpt4 book ai didi

java - Java 中的可变对象

转载 作者:行者123 更新时间:2023-12-01 18:14:48 27 4
gpt4 key购买 nike

我有三个问题:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com