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

更新於: 2020年7月10日

2K+ 瀏覽量

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告