提问者:小点点

方法引用静态vs非静态


我想知道如何区分同名的静态和非静态方法引用。在我的示例中,我有一个名为StringCollector的类,它具有以下三个方法:
StringCollector append(String string)
静态StringCollector append(StringCollector stringCollector, String string)
StringCollector conat(StringCollector stringCollector)
现在如果我想使用Stream


共1个答案

匿名用户

在这种情况下,对实例方法append的未绑定引用与对静态方法append的引用具有相同的性质、参数类型甚至返回值,因此不,您无法解决方法引用的歧义消除。如果您不想重命名其中一个方法,则应该使用lambda代替:

collect(StringCollector::new, (sb, s) -> sb.append(s), StringCollector::concat);

或者如果你真的想使用静态方法:

collect(StringCollector::new, (sb, s) -> StringCollector.append(sb, s),
        StringCollector::concat);