是否可以使用方法參考傳遞參數? 例如,我必須創建一個TreeMap
,但使用reverseOrder()
。 有沒有像TreeMap::new(reverseOrder())
這樣的東西存在?方法參考中的參數
方法參考中的參數
回答
不,你不能用一個方法引用做到這一點。
您可以使用lambda表達式來代替:
() -> new TreeMap<TheRelevantType>(reverseOrder())
或
() -> new TreeMap<>(reverseOrder())
如果您正在使用的情況下,其中的編譯器可以推斷TreeMap
的元素類型此表達式。
您需要一個lambda表達式...你可能在想約Supplier
:
() -> new TreeMap<>(Comparator.reverseOrder())
謝謝,我想象它不能完成 –
方法引用本身(今天)不支持這種方法,但有很多情況下方法引用可以與使用Eclipse Collections API的參數一起使用。看看下面的例子:
Map<String, TreeSet<String>> jdkMap = new HashMap<>();
jdkMap.put("one", new TreeSet<>(Comparator.reverseOrder()));
jdkMap.computeIfAbsent("two", key -> new TreeSet<>(Comparator.reverseOrder()));
MutableMap<String, TreeSet<String>> ecMap =
Maps.mutable.with("one", new TreeSet<>(Comparator.reverseOrder()));
ecMap.getIfAbsentPutWith("two", TreeSet::new, Comparator.<String>reverseOrder());
Assert.assertEquals(jdkMap, ecMap);
在這裏,我比較使用JDK的Map.computeIfAbsent()
方法,這需要Function
並通過了關鍵的參數,和Eclipse收藏MutableMap.getIfAbsentPutWith()
方法,還需要一個Function
並傳遞一個額外的參數。在JDK示例中,我必須使用lambda。在EC示例中,我能夠使用TreeSet::new
構造函數引用,並指定Comparator.<String>reverseOrder()
作爲我想要傳遞給它的參數。
有在Eclipse類別可用的許多*With
方法(例如selectWith
,rejectWith
,collectWith
,detectWith
,anySatisfyWith
等)。這些方法增加了可用於Java 8中方法引用的位置總數。
您將在Eclipse集合Katas中找到與參數一起使用的方法引用的示例。
Company Kata -> Exercise 2 Test
Pet Kata -> Exercise 2 Test
注:我的Eclipse集合的參與者。
您不能在Java中使用帶參數的方法引用。您必須使用lambda表達式來代替:
Supplier<Map<String, String>> factory =() ->
new TreeMap<>(Comparator.reverseOrder());
但是,如果出於某種原因,你想/需要反正使用的方法參考,這裏有一個方法用一個輔助方法來做到這一點:
public static <T, U> Supplier<T> withArg(
Function<? super U, ? extends T> methodRef,
U arg) {
return() -> methodRef.apply(arg);
}
Supplier<Map<String, String>> factory = withArg(
TreeMap::new,
Comparator.<String>reverseOrder());
- 1. 方法的參考
- 2. 與方法參考
- 3. 無法更改方法中參數的參考對象
- 4. 調用方法的參考
- 5. 參考enum中的參數
- 6. 參考參數
- 7. 引用參考數組的方法?
- 8. C#參考參數的用法
- 9. 方法和參考溢出
- 10. PHP參考靜態方法
- 11. DojoToolkit widget.placeAt()方法參考
- 12. 使用方法參考
- 13. 在實例參數中調用實例方法參考
- 14. C++參考和參考參數
- 15. 參考方法中的一個部分
- 16. 參考\ ref命令中的方法
- 17. 我如何參考UIVIiw中的方法?
- 18. 調用帶反射的參考參數的方法
- 19. 與數組構造參考方法
- 20. 方法參考不編譯 - 整數::新
- 21. 參數和參考
- 22. 參考PHP4參數?
- 23. 通過參數化構造函數作爲方法參考
- 24. Java 8:使用Lambda參考的方法作爲參數
- 25. 覆蓋無參考參數的通用方法?
- 26. 另一種方法的Javadoc參考參數
- 27. C#數組參數參考
- 28. 方法接口參數作爲參考問題
- 29. 如何指定參考方法參數實現接口
- 30. 參考Objective-C中的參數
方法引用是對現有方法的引用__。如果沒有現成的方法完全符合你的要求,那麼可以編寫這樣一個方法(然後捕獲對它的引用),或者使用一個lambda,它的主體做你想做的事情。 –
另外[Java 8中的方法引用的外部參數](https://stackoverflow.com/questions/38697939/external-argument-to-method-reference-in-java-8)並可能[更多](https ://stackoverflow.com/search?q =參數+%22方法+參考%22) –