我想知道如何区分具有相同名称的静态和非静态方法引用。在我的例子,我有一个名为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