1. 程式人生 > >Java學習--Interface, inner class, anonymous inner class, lambda例項比較

Java學習--Interface, inner class, anonymous inner class, lambda例項比較

通過介面,內部類,匿名內部類,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中會編譯錯誤。

輸出: