同样,我们为Int*
,Double*
,Long*
提供了与Function
,Supplier
,Predicate
对应的不同界面。
在我看来,使用这些特殊接口的唯一好处是使代码更具可读性并强制其客户端仅使用该特定类型作为输入。
但除此之外,我是否遗漏了其他一些用例?
答案 0 :(得分:6)
这些接口的目标是允许直接使用原始类型。这样可以节省自动装箱和自动装箱功能,从而使这些界面(以及依赖于它们的相关IntStream
,LongStream
和DoubleStream
)更有效。
例如,您使用的Function<Integer,R>
代替使用Integer
方法接受R
并生成IntFunction<R>
类型的结果,而不是int
使用R
采用int
并生成类型int
的结果的方法。如果您将Function<Integer,R>
传递给该函数,则可以避免在将IN
传递给IN
方法时发生的装箱。
答案 1 :(得分:4)
IntPredicate使用int
作为输入,而Predicate<Integer>
则需要Integer
,所以基本上没有装箱/拆箱。
这也为基元引入了额外的方法,例如,例如IntStream#sum
。