3

我刚刚看了新的 Java 8功能包,想知道为什么会有类似的接口

  • DoubleFunction
  • IntFunction
  • LongFunction
  • ...

不扩展。_ Function这是否意味着我将无法通过需要 a 的Function<T,Int>地方IntFunction<T>,反之亦然?这同样适用*Block*Supplier*UnaryOperator

我可以看到返回原语时不必检查的优点null,但缺点列表似乎要长得多

4

1 回答 1

5

这个问题与 Java 中的原始类型没有统一到可替代的事实有关Object,并且具有泛型类型擦除。

在最后一个足够时使用Function<T, Integer>而不是有两个缺点:IntFunction<T>

  • 每个返回int的都是装箱的——这意味着更大的内存占用;
  • 每个返回Integer的都会自动运行时检查(可以优化掉,但是是的......);

请注意,Java 中集合框架的这些问题导致人们编写了一个名为 Trove 的完整库,该库避开了泛型接口,而支持针对每种原始类型的专用集合类型。

于 2013-02-13T10:07:27.273 回答