java - OptionalInt 是否可重用?

标签 java java-8 option-type

查看 OptionalInt 的 Java8 文档,似乎不能通过设置新值或清空现有值来重用 OptionalInt 。此外,JavaDoc 仅显示了两种通过调用静态方法初始化 OptionalInt 的方法 - 看起来像一个不可变对象(immutable对象)。

真的不能重复使用吗?

想象一个批处理,其中要处理的数据由一个 int 原语组成,它可以是可选的。必须为每一行(假设为数百万行)创建一个新的 OptionalInt 对象。目标是避免不必要的对象实例化和额外的垃圾收集。所以我宁愿自己重新实现它并避免使用 Java8 实用程序类 OptionalInt?

最佳答案

OptionalIntimmutable .这意味着,一旦创建了对象,就无法修改其状态。

OptionalInt 是通过调用静态工厂 empty() 创建的或 of(value) .然后,有几种方法可以获取可选值 ( getAsInt() ),如果没有值则使用默认值 ( orElse(other) ) 等,但是您将找不到更新当前值或将其清空的方法。

在您的批处理示例中,不变性实际上是您想要拥有的东西,因为it really helps building concurrent applications .当您处理数百万行时,您希望通过使用多线程来加快该过程。在多线程环境中处理可变对象很难正确处理。

您不必太担心创建的新对象。通常,它们是短暂的,并且 JVM handles that kind of objects very well .实际上,看看this question : 不可变对象(immutable对象)更适合垃圾收集器。

关于java - OptionalInt 是否可重用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33064298/

相关文章:

java - java 8升级后@RunWith(MockitoJUnitRunner.class)问题

java - 复合 key 正在更改,Hadoop Map-Reduce?

java - 传统命令式编程风格与函数式编程风格的区别

java - 数组可以用作 HashMap 键吗?

java - 从 SUMO 模拟获取实时汽车数据到 java

java - 如何定义传入 lambda 表达式时将调用哪个重载方法?

使用自定义收集器的 Java 8 分组?

swift - 使字典值作为扩展名成为非可选

java - 从 Optional<> 转换为 ArrayList<>

java - 为什么没有 OptionalDouble orElseNull() 或更好的解决方案