温馨提示×

Java Lambda表达式可以替代哪些匿名内部类

小樊
83
2024-09-11 18:44:18
栏目: 编程语言

Java Lambda表达式主要用于简化匿名内部类的创建过程,特别是在实现单个抽象方法接口时。Lambda表达式可以替代以下场景中的匿名内部类:

  1. 实现Runnable接口的匿名内部类:
// 使用匿名内部类
new Thread(new Runnable() {
    @Override
    public void run() {
        // 执行任务
    }
}).start();

// 使用Lambda表达式
new Thread(() -> {
    // 执行任务
}).start();
  1. 实现ActionListener接口的匿名内部类:
// 使用匿名内部类
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // 处理事件
    }
});

// 使用Lambda表达式
button.addActionListener(e -> {
    // 处理事件
});
  1. 实现Comparator接口的匿名内部类:
// 使用匿名内部类
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
});

// 使用Lambda表达式
Collections.sort(list, (s1, s2) -> s1.length() - s2.length());
  1. 实现其他只有一个抽象方法的接口的匿名内部类。

需要注意的是,Lambda表达式并不能完全替代所有匿名内部类的场景。例如,当需要访问外部类的非final变量或者需要创建匿名内部类的多个实例时,仍然需要使用匿名内部类。此外,Lambda表达式也无法替代需要实现多个方法的接口。

0