zoukankan      html  css  js  c++  java
  • 匿名内部类转换为lambda表达式

    今天练习匿名内部类的写法,遇到这么个问题:

    public class exercise {
        public static void main(String[] args) {
            NumClock numClock = new NumClock(1000);
            numClock.start();
    
            JOptionPane.showMessageDialog(null,"Quit the program?");
            System.exit(0);
        }
    }
    
    class NumClock {
        int sep;
        int n = 0;
        public NumClock(int sep){
            this.sep = sep;
        }
    
        public void start() {
            ActionListener listener = new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println(++n);
                }
            };
            Timer timer = new Timer(sep, listener);
            timer.start();
        }
    
    }

    IDEA硬是告诉我这里可以替换为lambda表达式,我百思不得其解,这种匿名内部类形式还能用lambda表达式替换?

    但IDEA强大的智能提示功能一般是不会有错的,于是我开始在网上寻找替换的方法,最后变成了这样:

    class NumClock {
        int sep;
        int n = 0;
        public NumClock(int sep){
            this.sep = sep;
        }
    
        public void start() {
            ActionListener listener = event -> System.out.println(n++);
            Timer timer = new Timer(sep, listener);
            timer.start();
        }
    }

     运行,正确。哇,这样的写法真的是比写一个臃肿的匿名内部类或者内部类要简洁太多。

    前面的event便是listener代码头的参数,箭头后面的内容便是代码块,由于这里只有一个语句,所以不需要有大括号。

    如果有多条语句,就会是这样:

    也是要比直接写内部类要简洁的多。

  • 相关阅读:
    OO助教总结
    OO2019第四单元作业总结
    OO2019第三单元作业总结
    OO2019第二单元作业
    OO2019第一单元作业总结
    OO第一单元作业总结
    BUAA_OO_2020_Unit4_Summary
    BUAA_OO_2020_Unit3_Summary
    BUAA_OO_2020_Uint2_Summary
    闫金柱-OO第一单元总结
  • 原文地址:https://www.cnblogs.com/MYoda/p/11246002.html
Copyright © 2011-2022 走看看