Java匿名内部类

三种方式的演化

Thread构造方法如下

public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
}

Runnable 是一个接口

@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

调用对比:

public class App {
   public static void main(String[] args) {

      //default
      new Thread(new Task()).start();

      //匿名内部类
      new Thread(new Runnable() {
         @Override
         public void run() {
            System.out.println("002");
         }
      }).start();

      //Lambda表达式
      new Thread(() -> {
         System.out.println("003");
      }).start();
   }
}

class Task implements Runnable {
   @Override
   public void run() {
      System.out.println("001");
   }
}

匿名内部类 vs Lambda表达式

Java匿名内部类
所以,不是所有使用匿名内部类的地方都可以使用Lambda表达式代替。
ref: https://www.geeksforgeeks.org/difference-between-anonymous-inner-class-and-lambda-expression/

上一篇:浅谈java接口和抽象类不能实例化原因


下一篇:JAVA多线程