可以使用方法引用来访问静态方法吗?

时间:2017-01-11 11:34:08

标签: java java-8 java-stream method-reference

根据:

https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html

它看起来很可能,但是尝试实际返回编译错误。 由于我们无法使用静态方法实现接口,因此它应该是不可能的更有意义。

public class SomeClass {

    static public boolean getB(){
        return false;
    }
}

List<SomeClass> list = new ArrayList<>();       
list.add(new SomeClass());

// below causes compile error, which I expect, however documentation indicates oherwise
list.stream().filter(SomeClass::getB).collect(Collectors.toList());

这是编译错误:

&#34;此行有多个标记      - 应该以静态方式访问SomeClass类型的方法getB()      - Stream类型中的方法过滤器(Predicate)不适用于      arguments(SomeClass :: getB)&#34;

1 个答案:

答案 0 :(得分:6)

您可以,但方法的返回类型和参数必须与功能接口的唯一方法(此处为Predicate<Something>)匹配。

假设您的列表是List<Something>,因为谓词应该返回基于Something作为输入的布尔值,如果您的方法被定义为

,您的代码将被编译
public static boolean getB(Something s)

public static boolean getB(Object o)