我刚刚看了一下新的Java 8 function package,并想知道为什么会有像
这样的接口DoubleFunction
IntFunction
LongFunction
不扩展Function
。这是否意味着我无法通过需要Function<T,Int>
的{{1}},反之亦然?这同样适用于IntFunction<T>
,*Block
和*Supplier
。
我可以看到返回基元时我不必检查*UnaryOperator
的优势,但缺点列表似乎要长得多
答案 0 :(得分:3)
这个问题与Java中的原始类型不统一为Object
可替代,以及泛型类型擦除这一事实有关。
当最后一个足够时,使用Function<T, Integer>
代替IntFunction<T>
有两个缺点:
int
都被装箱 - 意味着更大的内存占用; Integer
都会获得一个自动运行时检查(可以优化掉,但是......); 请注意,Java中的集合框架的这些问题导致人们编写了一个名为Trove的整个库,它避开了通用接口,支持每种基本类型的专用集合类型。