【发布时间】:2016-01-21 22:09:40
【问题描述】:
我想知道如何区分同名的静态和非静态方法引用。在我的示例中,我有一个名为 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);
正如我们所见,代码无法编译。我认为这是因为编译器无法决定使用哪种方法,因为它们中的每一个都会匹配功能。现在的问题是:有什么方法可以区分静态方法引用和实例方法引用吗?
(PS:是的,如果我重命名这两种方法中的一种,代码就会编译。对于它们中的每一种。)
【问题讨论】:
-
我真的不建议将方法命名为与您的类相同...
-
另外,这是一个 C# 答案,但它也非常适用于 Java:stackoverflow.com/questions/160118/…
标签: java static java-8 method-reference