根据:
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
看起来它是可能的,但是尝试真正返回编译错误.由于我们无法使用静态方法实现接口,因此它更有意义.
public class SomeClass { static public boolean getB(){ return false; } } Listlist = 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类型中的方法过滤器(Predicate)不适用于参数(SomeClass :: getB)"
您可以,但方法的返回类型和参数必须与功能接口的唯一方法(Predicate
此处)相匹配.
假设你的列表是a List
,因为谓词应该基于Something
as输入返回一个布尔值,如果你的方法定义为
public static boolean getB(Something s)
要么
public static boolean getB(Object o)