Java 中匿名类和 lambda 表达式的区别?\

java 8object oriented programmingprogramming

匿名类是没有名称的内部类,这意味着我们可以同时声明实例化类。lambda表达式是编写匿名类的简写形式。通过使用 lambda 表达式,我们可以声明没有任何名称的方法。

匿名类与 Lambda 表达式

  • 匿名类对象在编译后会生成一个单独的类文件,这会增加 jar 文件的大小,而 lambda 表达式会转换为私有方法。它使用invokedynamic 字节码指令动态绑定此方法,从而节省时间和内存。
  • 在lambda表达式中,我们使用this 关键字 表示当前类,而在匿名类的情况下,this 关键字 可以表示该特定的匿名类。
  • 匿名类可用于多个抽象方法的情况,而lambda表达式专门用于功能性接口
  • 我们只需要在lambda表达式中提供函数体,而在匿名类的情况下,我们需要编写冗余类定义

示例

public class ThreadTest {
   public static void main(String[] args) {
      Runnable r1 = new Runnable() { // 匿名类
      @Override
      public void run() {
         System.out.println("使用匿名类");
      }
   };
      Runnable r2 = () -> { // lambda 表达式
         System.out.println("使用 Lambda 表达式");
      };
      new Thread(r1).start();
      new Thread(r2).start();
   }
}

输出

使用匿名类
使用 Lambda 表达式

相关文章