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

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

根据:

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/

相关文章:

java - 数组语句内的方法调用导致程序出现 "hang"

java - 为什么我不能在 Optional.filter 的参数中用 Function.identity() 替换 (t -> t)?

java - 如何使用流 API 获取集合

java - 如何使用 Java 8 流?

java - 如何在 Spring Boot 中正确创建非持久存储库?

java - 模拟掷骰子游戏,非常初学者

java - 子类实例变量如何与父类实例联系

从列表中查找最大元素的java流性能

java - 将所有 HashMap 键小写

java - 如何将 WatchService 更改为流 api