java - Java lambda 方法和新对象
问题描述
我有以下代码:
public class RefDemo {
static class Demo implements Runnable {
public Demo() {
System.out.println(this.toString() + "-----");
}
@Override
public void run() {
System.out.println("run");
}
}
public static void main(String[] args) {
Runnable runnable = Demo::new; // lambda ref constructor method
runnable.run(); // does not do anything
System.out.println(runnable);
Runnable demo = new Demo(); // using new to create a Demo instance
demo.run();
System.out.println(demo);
}
}
哪个打印:
RefDemo$Demo@7291c18f----- // lambda run constructor method print
RefDemo$$Lambda$1/793589513@34a245ab // main method print
RefDemo$Demo@7cc355be-----
run
RefDemo$Demo@7cc355be
run
不知道为什么调用时代码不打印runnable.run();
为什么会这样?
解决方案
这段代码
Runnable runnable = Demo::new;
相当于这段代码
Runnable runnable = new Runnable() {
@Override
public void run() {
new Demo();
}
};
所以你指的不是构造函数的run
方法,Demo
而是构造函数。
推荐阅读
- ios - 将 UIView 高度从下到左展开,反之亦然
- uwp - NLog 不登录 Uwp 项目
- firebase - Flutter Streambuilder 上的新数据
- shell - ADB Bash 脚本在完成之前断开连接
- firebase - 将 Firebase 云消息传递中的通知发送到单个设备
- sorting - 通过谷歌脚本基于任意排序的字符串键对数据范围进行排序
- grafana-loki - 如何配置 Loki 以接受带有子路径的请求?
- css - Safari 浏览器中的 CSS 错误
- flutter - 在 Flutter 中查询 sqflite 数据表的特定单元格
- java - 强制转换的字符值无效