我无法理解以下代码的作用:
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());
});
}
}
我在主方法的所有行中都设置了断点,但只有以new Thread
开头的行中的断点才会被击中。
然而,lambda表达式中没有断点被击中。
另外,我不明白这段代码的作用。 AFAIU,lambda表达式不返回任何值。因此,代码不向Thread
构造函数提供任何参数。
另外,我不明白为什么会在这里创建一个线程。
你能帮我解决一下如何使用断点到达lambda表达式的内部吗?
答案 0 :(得分:3)
在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永远不会运行。