我一直想知道如何区分同名的静态和非静态方法引用。在我的例子中,我有一个叫做
现在,如果我想使用
正如我们所看到的,这段代码无法编译。我认为这是因为编译器无法决定使用哪个方法,因为每个方法都匹配该函数。现在的问题是:是否有任何可能区分静态方法引用和实例方法引用?
(PS:如果我重命名其中一个方法,那么每个方法都可以编译。)
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:如果我重命名其中一个方法,那么每个方法都可以编译。)