根据:
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
它看起来是可行的,但是实际尝试会返回编译错误。 更有意义的是,它不应该是可能的,因为我们不能用静态方法实现接口(interface)。
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());
这是编译错误:
“这条线有多个标记 - 应该以静态方式访问 SomeClass 类型的 getB() 方法 - 类型 Stream 中的方法 filter(Predicate) 不适用于 参数(SomeClass::getB)”
最佳答案
可以,但是方法的返回类型和参数必须与功能接口(interface)的唯一方法相匹配(此处为 Predicate<Something>
)。
假设您的列表是 List<Something>
,因为谓词应该返回一个基于 Something
的 boolean 值作为输入,如果您的方法定义为
public static boolean getB(Something s)
或
public static boolean getB(Object o)
关于java - 方法引用可以用来访问静态方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41589827/