我想知道如何區分具有相同名稱的靜態和非靜態方法引用。在我的例子,我有一個名爲StringCollector
類,有以下三種方法:
StringCollector append(String string)
static StringCollector append(StringCollector stringCollector, String string)
StringCollector concat(StringCollector stringCollector)
現在,如果我想用一個Stream<String>
收集字符串列表我會寫這樣的事情:
Arrays.asList("a", "b", "c").stream()
.collect(StringCollector::new, StringCollector::append, StringCollector::concat);
正如我們所看到的代碼不能編譯。我認爲這是因爲編譯器無法設定,使用哪種方法,因爲它們中的每一個都會匹配功能。現在的問題是:是否有任何可能的方法來從實例方法引用區分靜態方法引用?
:方法參考靜態與非靜態
4
A
回答
6
在這種情況下未結合的參考append
具有相同的元數,參數類型,甚至返回值的實例方法(PS是代碼,如果我重命名兩種方法之一編譯對於每個模件。)作爲對靜態方法append
的引用,所以不能,您無法解析方法引用的消歧。如果你不希望重命名的方法之一,你應該使用拉姆達代替:
collect(StringCollector::new, (sb, s) -> sb.append(s), StringCollector::concat);
或者,如果你真的想使用靜態方法:
collect(StringCollector::new, (sb, s) -> StringCollector.append(sb, s),
StringCollector::concat);
相關問題
- 1. 靜態/非靜態方法參考
- 2. 無法使靜態參考非靜態方法從動作條
- 3. 靜態參照非靜態方法getBaseContext()
- 4. 不能使靜態參考非靜態方法錯誤
- 5. 不能使靜態參考非靜態方法(Java)的
- 6. 泛型方法:靜態與非靜態
- 7. 靜態與非靜態方法2
- 8. 靜態與非靜態方法
- 9. PHP參考靜態方法
- 10. 不能使靜態參考非靜態場......但我不是在靜態參考
- 11. 非靜態方法來自非靜態參考錯誤。簡單的程序
- 12. 無法從類型使靜態參考非靜態方法getSystemService(字符串)
- 13. 靜態與非靜態類
- 14. Java:靜態方法與非靜態方法
- 15. 靜態同步方法與非靜態同步方法
- 16. 靜態/非靜態方法問題
- 17. 靜態和非靜態方法工作
- 18. powermockito靜態和非靜態方法鏈
- 19. 不能使靜態方法非靜態
- 20. 非靜態方法說它的靜態?
- 21. 靜態和非靜態方法
- 22. 非靜態的靜態方法
- 23. 非靜態調用靜態方法
- 24. 不能使靜態參考非靜態方法getUnit_id()從類型官
- 25. 對靜態變量和靜態方法的未定義參考
- 26. 參考靜態變量的靜態方法
- 27. Java 8方法參考非靜態方法
- 28. 嵌套類,undefined參考,靜態方法
- 29. 控制參考靜態方法性能
- 30. PHP:獲取靜態方法參考
我真的不推薦的命名方法與你的班級一樣... –
另外,這裏是一個C#答案,但它也非常適用於Java:http://stackoverflow.com/questions/160118/static-and-instance-methods-with-the-同名 –
http://stackoverflow.com/q/21873829/2711488 – Holger