OptionalInt 是否可重用?

gcl*_*ssn 2 java optional java-8

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

真的不能重复使用吗?

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

Tun*_*aki 5

OptionalInt不可变的。这意味着,一旦创建了对象,就无法修改其状态。

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

在您的批处理示例中,不变性实际上是您想要的,因为它确实有助于构建并发应用程序。当您处理数百万行时,您希望通过使用多线程来加快处理速度。在多线程环境中处理可变对象非常困难

您不必太担心创建的新对象。通常,它们是短暂的,JVM 可以很好地处理这种对象。实际上,看看这个问题:不可变对象更适合垃圾收集器。