通过接口,内部类,匿名内部类,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中会编译错误。
输出: