3 回答

TA貢獻1821條經驗 獲得超5個贊
new Thread( () -> { }, this.getName() ).start(); 這段代碼可以這樣看 , 首先是調用了Thread的構造函數去實例化對象 ,然后調用它的 start 方法.
這個構造函數有兩個參數 , 其中一個必須是函數式接口 , 去Thread類中查找只能找到 Thread( Runnable , String) 這個構造函數滿足要求.
然后第一個參數是Runnable對象 , 他采用的是 lambda表達式來作為參數傳遞 , 而不是使用匿名內部類或者Runnable的實現(xiàn)類對象作為參數
因為Runnable接口是一個函數式接口 , 只有一個 run() 方法且沒有參數 , 所以使用 () ->{ run方法具體實現(xiàn)代碼 } lambda表達式 , 相當于你創(chuàng)建了一個Runnable對象

TA貢獻1829條經驗 獲得超9個贊
首先 Runnable接口就是一個函數式接口 , 函數式接口都可以通過lambda表達式來達到行為參數化的目的 ; 意思就是說本來你是需要一個Runnable 類型作為參數 , 但是你不想新建一個類去實現(xiàn)Runnable接口 , 或者使用匿名內部類去 new 一個Runnable的實現(xiàn) , 那么lambda表達式可以幫你解決這些麻煩 . 而且函數式接口只能有一個抽象方法 (不算默認方法) , 所以你調用的就是這個方法 ; 這個是java8 開始支持的 , 很值得去學習一下 , 不知道我有沒有講清楚
添加回答
舉報