Man*_*idt 3 java functional-programming
我刚刚看了新的Java 8函数包,想知道为什么会有这样的接口
DoubleFunction
IntFunction
LongFunction
这也不会延长Function
。这是否意味着我将无法通过 a需要a 的Function<T,Int>
地方IntFunction<T>
,反之亦然?这同样适用于*Block
、*Supplier
和*UnaryOperator
。
我可以看到在null
返回原语时不必检查的优点,但缺点列表似乎要长得多
这个问题与 Java 中的原始类型不统一以替代Object
和泛型类型擦除这一事实有关。
当最后一个就足够Function<T, Integer>
了IntFunction<T>
时使用而不是有两个缺点:
int
都是装箱的——意味着更大的内存占用;Integer
都会进行自动运行时检查(可以优化掉,但是是的...);请注意,Java 中的集合框架的这些类型的问题导致人们编写了一个名为 Trove 的完整库,它避开了通用接口,支持每个原始类型的专用集合类型。