如果构造参数列表的结束小括号后面吗跟着一个大括号,就是在定义匿名内部类。
下面是一个例子:
package chapter_6;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.Instant;
public class AnonymousInnerClassTest {
public static void main(String[] args) {
var clock=new TalkingClock1();
clock.start(1000,true);
JOptionPane.showMessageDialog(null,"quit program?");
System.exit(0);
}
}
class TalkingClock1
{
public void start(int interval,boolean beep)
{
var listerner=new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.out.println("At the tone, the time is "+ Instant.ofEpochMilli(event.getWhen()));
if(beep) Toolkit.getDefaultToolkit().beep();
}
};
var timer=new Timer(interval,listerner);
timer.start();
}
}
如何利用匿名内部类得到其外围类?
例如:
System.err.println("Something awful haappend in"+getClass());
不过这对静态方法不奏效,因为调用getclass()时调用的是this.getclass(),而静态方法没有this。因此应该使用以下表达式
System.err.println("Something awful happened in"+new Object(){}.getClass().getEnclosingClass());
new Object(){}会得到一个匿名对象。