Java中匿名類和lambda表示式的區別?
匿名類是一個沒有名稱的內部類,這意味著我們可以同時宣告和例項化類。lambda表示式是編寫匿名類的簡短形式。透過使用lambda表示式,我們可以宣告沒有任何名稱的方法。
匿名類 vs Lambda表示式
- 匿名類物件在編譯後會生成一個單獨的類檔案,從而增加jar檔案的大小,而lambda表示式會被轉換成一個私有方法。它使用invokedynamic位元組碼指令動態繫結此方法,從而節省時間和記憶體。
- 我們在lambda表示式中使用this關鍵字來表示當前類,而在匿名類的情況下,this關鍵字可以表示特定的匿名類。
- 匿名類可以用於多個抽象方法的情況,而lambda表示式專門用於函式式介面。
- 我們只需要在lambda表示式中提供函式體,而在匿名類的情況下,我們需要編寫冗餘的類定義。
示例
public class ThreadTest { public static void main(String[] args) { Runnable r1 = new Runnable() { // Anonymous class @Override public void run() { System.out.println("Using Anonymous class"); } }; Runnable r2 = () -> { // lambda expression System.out.println("Using Lambda Expression"); }; new Thread(r1).start(); new Thread(r2).start(); } }
輸出
Using Anonymous class Using Lambda Expression
廣告