为什么不同的谓词接口是JAVA 8?

时间:2016-06-14 13:19:21

标签: java interface predicate functional-interface

在Java 8中提供了不同的谓词接口(例如DoublePredicate,LongPredicate,IntPredicate等)。现在,如果您要实现接口并在其中编写自己的代码,那么拥有不同谓词接口的优势是什么?为什么不只是一个谓词界面?

4 个答案:

答案 0 :(得分:7)

出于性能原因,存在这些不同的接口。

由于generics不允许原始类型(到目前为止)并且它们需要装箱,因此API为原语提供了专门化,因此您可以避免装箱和拆箱的成本。

答案 1 :(得分:5)

这些专用谓词接口的目的是在使用基元时避免不必要的data format

例如,如果您需要使用适用于Predicate值的int,则可以使用IntPredicateint直接传递给test(...) 1}}方法,而不是需要装箱到Predicate<Integer>对象的Integer

请注意,在Java中,不可能将原始类型用作类型参数(因此,不允许Predicate<int>)。

答案 2 :(得分:3)

不仅有Predicates,还有其他具有特定类型变体的功能接口。原因是,支持原语类型。

虽然通用版本可以与对象类型(包括DoubleLong等)一起使用,但是无法使用带有泛型的基元。即。

Predicate<int> p; //does not compile

例如,IntStreamint而非Integer上运行,但您无法在int值上使用对象类型的功能接口,因此您需要功能接口的int特定变体。

答案 3 :(得分:0)

提供这些专用谓词接口以支持原始数据类型,如int或float,而不进行自动装箱。没有它们,我们必须将我们的int数据转换为Integer Object以在Predicate接口中使用。

http://codedestine.com/java-8-predicate-interface/