在Java 8中提供了不同的謂詞接口(例如DoublePredicate,LongPredicate,IntPredicate等)。現在,如果要實現接口並在其中編寫自己的代碼,具有不同謂詞接口的優點是什麼?爲什麼不只是一個謂詞接口?爲什麼不同的謂詞接口n JAVA 8?
0
A
回答
3
這些專用謂詞接口的要點是在處理原語時避免不必要的auto-(un)boxing。
例如,如果你需要使用一個Predicate
上int
價值的作品,你可以使用IntPredicate
,使用它可以直接傳遞一個int
到test(...)
方法,而不是一個Predicate<Integer>
需要拳擊的Integer
對象。
請注意,在Java中,不可能使用基本類型作爲類型參數(因此,不允許使用Predicate<int>
)。
6
出於性能原因,存在這些不同的接口。
因爲generics
不允許原始類型(到目前爲止)並且他們需要裝箱,所以API爲原語提供了專門化,因此您可以避免裝箱和取消裝箱的成本。
2
不僅僅有Predicates
,還有其他具有類型特定變體的功能接口。原因是,支持原始的類型。
雖然一般版本可以與對象類型(包括Double
,Long
等)一起使用,也沒有辦法利用原語與泛型。即
Predicate<int> p; //does not compile
例如,IntStream
運行在int
,而不是Integer
,但你不能int
值使用對象類型的功能接口,所以您需要的功能接口的INT-特定變體。
0
提供了這些專用的謂詞接口,以支持原始數據類型,如int或float,而不用自動裝箱。沒有它們,我們必須將我們的int數據轉換爲整數對象以用於Predicate接口。
相關問題
- 1. Java中的謂詞8
- 2. 的Java 8總結由多個謂詞
- 3. 在Java流中使用謂詞8
- 4. 爲什麼Java接口
- 5. 爲什麼謂詞命名約定在不同函數之間有所不同?
- 6. 爲什麼這個Prolog謂詞有效?
- 7. 什麼是謂詞檢查?
- 8. 不連續謂詞是什麼意思?
- 9. Spring Data + QueryDSL空謂詞+謂詞鏈接
- 10. 爲什麼不是Java 8的謂詞<T>擴展功能<T, Boolean>
- 11. 爲什麼過濾器不返回謂詞函數的結果?
- 12. 爲什麼我的Prolog謂詞反轉/ 2不起作用?
- 13. 爲什麼EntityFramework不使用我的謂詞?
- 14. 爲什麼不在Fuseki中指定謂詞和對象?
- 15. 在java 8個流中計算合格和不合格謂詞
- 16. 什麼是LISP中的宏的謂詞
- 17. 瞭解Java謂詞
- 18. 爲什麼我不能將謂詞應用到java流過濾器?
- 19. 什麼是電流()的謂詞
- 20. 什麼是C#中的謂詞?
- 21. 什麼是C++中的謂詞?
- 22. 什麼是「基於謂詞的搜索」?
- 23. C++中的謂詞是什麼?
- 24. 爲什麼在std :: copy_if簽名不限制謂詞類型
- 25. 爲什麼SequenceEqual需要IEqualityComparer而不是謂詞?
- 26. Drools爲什麼不使用Java 8?
- 27. 空白接口與普通接口有什麼不同?
- 28. 爲什麼Java中沒有「Equlable」接口?
- 29. 爲什麼在java中需要接口?
- 30. 謂詞和不同的對象
更有趣的問題是通過做一些原始類型而不是其他的。 ;) –
@PeterLawrey其實它是爲什麼不是BooleanStream,CharStream ....? Brian表示,它會增加很少使用的API的JDK佔用空間。 –
@SleimanJneidi儘管可能是這個原因,但我沒有想象那些從未使用過的壓縮類文件會增加足跡。 –