一尘不染

可选Int与可选

java

在浏览java.util软件包的文档时,我很惊讶地发现了这一点,Optional<T>并且OptionalInt彼此之间没有任何关系。这似乎很难相信,因为它表明它们是无关的类。

  1. 他们为什么没有一个通用的接口,类,子类型或 某些东西 来揭示它们之间的关系?(当您查看它们的用途时,它们是 非常 相似的类。)
  2. 另外,为什么需要额外的OptionalInt课程呢?你为什么不能只用Optional<Integer>呢?我以为是因为它int是原始的,但事实并非OptionalChar如此,这将是一个不一致的设计选择。

阅读 180

收藏
2020-12-03

共1个答案

一尘不染

Java 8引入了很多专门针对基元的内容。原因很可能是装箱原语会创建大量的废纸箱。

例如这个

OptionalInt optionalFirst = IntStream
    .range(0, 100)
    .filter(i -> i % 23 > 7)
    .findFirst();

在这里,Optional<Integer>结果将是不一致的。像这样的方法也ifPresent(IntConsumer consumer)可以与IntStream世界共存。Optional<Integer>会迫使您进行转换(如果需要,您可以轻松完成此操作)

不需要特殊支持,char或者shortbyte因为所有这些都可以表示为int。缺少的是一个,boolean但是由于只有2个值,因此您无法与它们一起在流中进行太多操作。

2020-12-03