今天練習匿名內部類的寫法,遇到這么個問題:
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代碼頭的參數,箭頭后面的內容便是代碼塊,由於這里只有一個語句,所以不需要有大括號。
如果有多條語句,就會是這樣:
也是要比直接寫內部類要簡潔的多。
