为什么Java 8中存在像DoubleFunction这样的原始函数

时间:2013-02-13 10:02:56

标签: java functional-programming

我刚刚看了一下新的Java 8 function package,并想知道为什么会有像

这样的接口
  • DoubleFunction
  • IntFunction
  • LongFunction
  • ...

扩展Function。这是否意味着我无法通过需要Function<T,Int>的{​​{1}},反之亦然?这同样适用于IntFunction<T>*Block*Supplier

我可以看到返回基元时我不必检查*UnaryOperator的优势,但缺点列表似乎要长得多

1 个答案:

答案 0 :(得分:3)

这个问题与Java中的原始类型不统一为Object可替代,以及泛型类型擦除这一事实有关。

当最后一个足够时,使用Function<T, Integer>代替IntFunction<T>有两个缺点:

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

请注意,Java中的集合框架的这些问题导致人们编写了一个名为Trove的整个库,它避开了通用接口,支持每种基本类型的专用集合类型。