为什么在Java 8中有像DoubleFunction这样的原始函数
我只是看了一下新的Java 8
函数包,想知道为什么会有类似的接口
DoubleFunction
IntFunction
LongFunction
- …
这也
延长Function
。这是否意味着我将无法通过要求a的Function<T,Int>
地方IntFunction<T>
,反之亦然?这同样适用于*Block
,*Supplier
和*UnaryOperator
。
我看到的优点是,不必null
在返回原语时进行检查,但是缺点列表似乎要长得多
回答:
此问题与以下事实有关:Java中的原始类型未统一为可替代Object
,并且具有通用类型擦除。
使用Function<T, Integer>
代替而不是IntFunction<T>
最后一个满足时有两个缺点:
- 每个返回的内容
int
都用盒装-意味着更大的内存占用; - 每个返回的内容
Integer
都会获得自动运行时检查(可以对其进行优化,但是是的。。。);
请注意,Java中的收集框架存在这类问题,导致人们编写了一个名为Trove的整个库,该库避开了通用接口,而支持每种原始类型的专用收集类型。
以上是 为什么在Java 8中有像DoubleFunction这样的原始函数 的全部内容, 来源链接: utcz.com/qa/407042.html