[英]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.