今日では、匿名の内部クラスを書く練習は、このような問題に遭遇しました:
パブリック クラス運動{ 公共 静的 ボイドメイン(文字列[]引数){ NumClock numClock = 新しい NumClock(1,000 )。 numClock.start(); JOptionPane.showMessageDialog(ヌル、 "プログラムを終了します?" ); でSystem.exit( 0 ); } } クラスNumClock { INT 9月。 INT、N = 0 。 公共 NumClock(INT 9){ この .sep = 9月。 } 公共 のボイド開始(){ たActionListenerリスナー = 新しいのActionListener(){ @Override 公共 ボイドのactionPerformed(のActionEvent e)の{ System.out.printlnは( ++ N) } }。 タイマータイマー = 新しいタイマー(9月、リスナー)。 timer.start(); } }
IDEA彼は匿名内部クラスのこのフォームはラムダ式で置き換えることができることを、私は困惑午前、ラムダ式は交換することができる私に言いましたか?
しかし、IDEA強力なインテリジェントプロンプトは、一般的に間違っていることができないので、私はインターネットを交換する方法を探し始めました、そして最終的にこのになって:
クラスNumClock { INT 9月。 INT、N = 0 。 公共 NumClock(INT 9){ この .sep = 9月。 } 公共 ボイド開始(){ たActionListenerリスナー =イベント- >のSystem.out.println(N ++ )。 タイマータイマー = 新しいタイマー(9月、リスナー)。 timer.start(); } }
正しく実行します。うわー、これは本当にあまりにもシンプルに肥大化した匿名の内部クラスや内部クラスを書くよりも、書いています。
イベントリスナーは、パラメータコードの前にあるコンテンツのブロック矢印の後ろ、頭で一つだけの文があるので、必要ブレースがない、です。
複数のステートメント場合、それはこのようになります。
内部クラスとより簡潔に直接書き込まれます。