2013-02-13 25 views
2

我只是來看看新的Java 8 function package,不知爲什麼有像爲什麼喜歡DoubleFunction有基本功能的Java 8

  • DoubleFunction
  • IntFunction
  • LongFunction
  • 接口...

哪個做不是延伸Function。那並不意味着我將無法通過Function<T,Int>,那裏需要IntFunction<T>,反之亦然?這同樣適用於*Block,*Supplier*UnaryOperator

我可以看到,我不會有檢查null返回時,一個原始的優勢,但劣勢名單似乎更長

+0

相關(但*不*直接式兩份)https://stackoverflow.com/q/23007422/2886891 – 2018-02-07 22:16:51

回答

3

這個問題涉及到一個事實,即原始類型的Java並不是統一的,可以代替Object,並且可以使用泛型擦除。

使用的Function<T, Integer>代替IntFunction<T>當最後一個足夠有2個缺點:

  • 每次返回int是盒裝 - 這意味着更大的內存佔用;
  • 每個返回的Integer都會得到一個自動的運行時檢查(可以優化掉,但是...);

注意,這類問題在Java集合框架已經導致人寫一整個圖書館,名爲特羅韋,即避開了通用接口,有利於專門收集類型的每一個原始類型。

+0

這似乎壁壘高的編程抽象和過早的優化 – 2013-02-13 10:23:25

+0

@ManuelSchmidt更乾淨的代碼的方法可行:哦,絕對是,這是超級壓抑。 – 2013-02-13 18:22:07