java - Java 8:以非静态方式对静态方法的方法引用
问题描述
我正在为 OCP 考试研究新的 Stream API,我发现了一些我不太了解的东西。这是我的代码:
void methodOne() {
this.compare(1, 2); // This works fine.
Stream.of(1,2,3)
.sorted(this::compare); // Compilation error.
}
static Integer compare(Integer s1, Integer s2) {
return 0;
}
在这里,我有一个名为 compare 的静态方法和一个名为 compare 的非静态方法。如果我从非静态方法调用 compare 方法,我会收到编译器警告:
TestStream 类型的方法 compare(Integer, Integer) 应该以静态方式访问
如果我改为在流中使用对同一方法的方法引用,则该编译器警告将变成带有相同消息的编译器错误。
我知道为什么会收到警告,但如果我使用方法引用,我不明白为什么此警告会变成编译错误。我也没有在网上找到任何东西。有人可以向我解释吗?
解决方案
迄今为止,通过引用访问静态方法被视为设计错误 AFAIK。你甚至可以这样做:
YourClass c = null;
c.compare (...)
这样就可以了(尽管有警告)。
当设计的 java-8 特性得到纠正时,访问静态方法(用于方法引用)的唯一方法是通过类本身:
YourClass::compare
推荐阅读
- php - Laravel 私有方法返回 null 但带有变量,但返回带有硬编码 int 的正确响应
- scala - 列表到 Scala 中的列表列表
- azure-iot-hub - Azure IOT 预配服务中的个人注册无法通过 REST API
- node.js - 如何在获取请求链中递归调用单个获取请求
- python - 提供 pubsub 主题作为参数的数据流错误
- php - 在兼容的 S3 存储上获取 Invalid_Signature_V4_Authorization_Header
- c++ - C++ 打印析构函数
- python - ValueError: microsecond must be in 0..999999 尝试使用散点图绘制系列时
- scala - 如何按顺序而不是同时运行加特林场景?
- r - R:如何解释我的派对情节决策树?