簡體   English   中英

斷點不適用於Java中的Lambda表達式

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM