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

我刚看了一下新的Java 8 函数包,并想知道为什么有这样的接口

  • DoubleFunction
  • IntFunction
  • LongFunction

哪些扩展Function 。 这是否意味着我无法传递Function ,其中需要IntFunction ,反之亦然? 这同样适用于*Block*Supplier*UnaryOperator

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

这个问题与以下事实有关:Java中的原始类型不统一为可替代Object ,并且具有generics类型擦除。

当最后一个有足够的2个缺点时Function使用Function代替IntFunction

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

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