Java學習--Interface, inner class, anonymous inner class, lambda例項比較
阿新 • • 發佈:2019-02-11
通過介面,內部類,匿名內部類,lambda表示式實現一個相同的例子,該例子輸出每隔一秒鐘輸出一條列印語句,同時彈出一個對話視窗,點選OK鍵,則程式退出。
Interface
TimerTest.java
package timer; import java.awt.event.ActionListener; import javax.swing.JOptionPane; import javax.swing.Timer; public class TimerTest { public static void main(String[] args) { ActionListener listener = new TimePrinter(); Timer t = new Timer(10000, listener); t.start(); JOptionPane.showMessageDialog(null, "Quit program?"); System.exit(0); } }
TimerPrinter.java
----------------------------------------------------------------------------------------------------package timer; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; public class TimePrinter implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub System.out.println("At the tone, the time is " + new Date()); Toolkit.getDefaultToolkit().beep(); } }
----------------------------------------------------------------------------------------------------
InnerClass
InnerClassTest.java
package innerClass; import javax.swing.JOptionPane; public class InnerClassTest { public static void main(String[] args) { TalkingClock clock = new TalkingClock(1000, true); clock.start(); JOptionPane.showMessageDialog(null, "Quit program?"); System.exit(0); } }
TalkingClock.java
package innerClass;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.Timer;
public class TalkingClock {
private int interval;
private boolean beep;
public TalkingClock(int interval, boolean beep) {
this.interval = interval;
this.beep = beep;
}
public void start() {
ActionListener listener = new TimePrinter();
Timer t = new Timer(interval, listener);
t.start();
}
public class TimePrinter implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("At the tone, the time is " + new Date());
if (beep) Toolkit.getDefaultToolkit().beep();
}
}
}
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
AnonymousInnerClass
AnonymousInnerClassTest.java
package anonymousInnerClass;
import javax.swing.JOptionPane;
public class AnonymousInnerClassTest {
public static void main(String[] args) {
TalkingClock clock = new TalkingClock();
clock.start(1000, true);
JOptionPane.showMessageDialog(null, "Quiz program?");
System.exit(0);
}
}
TalkingClock.java
package anonymousInnerClass;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.Timer;
public class TalkingClock {
public void start(int interval, boolean beep) {
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("At the tone, the time is " + new Date());
if (beep) Toolkit.getDefaultToolkit().beep();
}
};
Timer t = new Timer(interval, listener);
t.start();
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Lambda
LambdaClockTest.java
package lambdaClock;
import javax.swing.JOptionPane;
public class LambdaClockTest {
public static void main(String[] args) {
LambdaClock clock = new LambdaClock();
clock.start(1000, true);
JOptionPane.showMessageDialog(null, "Quiz program?");
System.exit(0);
}
}
LambdaClock.java
package lambdaClock;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.Timer;
public class LambdaClock {
public void start(int interval, boolean beep) {
Timer t = new Timer(interval, event ->
{
System.out.println("At the tone, the time is " + new Date());
if (beep) Toolkit.getDefaultToolkit().beep();
});
t.start();
}
}
注:Lambda是jdk 1.8新增加的功能,在jdk 1.7中會編譯錯誤。
輸出: