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

真的不可重用吗?

想象一下一个批处理,其中要处理的数据由一个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:不可变对象是垃圾收集器的首选。

10-05 19:34