[英]Breakpoints does not work in lambda expression in Java
我不明白以下代码的作用:
public class Main {
public static void main(String[] args) throws UnsupportedProtocolException, IOException {
new Thread(() -> {
PropertiesLoader loader = new PropertiesLoader();
loader.load(args);
System.out.println(loader.getProperties());
});
}
}
我已经在main方法的所有行中都设置了断点,但是只有命中new Thread
的行的断点才被命中。
但是,lambda表达式主体中的任何断点都不会受到攻击。
另外,我不明白这段代码的作用。 AFAIU,lambda表达式不返回任何值。 因此,该代码不向Thread
构造函数提供任何参数。
另外,我不明白为什么在这里创建线程。
您能帮助我如何使用断点到达lambda表达式的内部吗?
lambda内部没有达到断点的原因是因为lambda从未运行。
() -> { PropertiesLoader loader = new PropertiesLoader(); loader.load(args); System.out.println(loader.getProperties()); }
是不带任何参数且具有void返回类型的lambda,它与功能接口java.lang.Runnable
匹配(因为它具有方法void run()
)。 构造函数java.lang.Thread(java.lang.Runnable)
被调用以构造一个新线程,但是从不对该线程调用start()
,因此lambda永远不会运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.