【发布时间】:2020-02-16 18:10:13
【问题描述】:
我有一个问题,我正在用一本书学习 java,并且我在其中复制了一些代码(并进行了一些更改)并进行了一些调查,我注意到一些奇怪的东西......,这是代码
public static void main(String[] args)
{
Timer timer = new Timer(1000, (event) ->
{
System.out.println("At the Tone, the time is" + Instant.ofEpochMilli(event.getWhen()));
Toolkit.getDefaultToolkit().beep();
});
timer.start();
JOptionPane.showMessageDialog(null, "Quit?");
System.exit(0);
}
这只是一个代码,它会在第二次通过时通知您。 (这段代码编译运行流畅)
如你所见,Timer Constructor 需要 2 个 pars (int, ActionListener)
public Timer(int delay, ActionListener listener)
并且 ActionListener 接口有一个方法是 actionPerformed 并且需要 ActionEvent 参数
public void actionPerformed(ActionEvent e);
现在这是我的问题,在上面的 lambda 表达式中调用此 actionPerformed 方法时 编译器如何知道调用哪个构造函数来实例化 ActionEvent 而没有给他任何关于参数的线索,ActionEvent 没有“无参数构造函数”并且方法 getWhen() 不是静态的(obj 必须实例化)
下面是ActionEvent的所有构造函数:
public ActionEvent(Object source, int id, String command)
public ActionEvent(Object source, int id, String command, int modifiers)
public ActionEvent(Object source, int id, String command, long when,
int modifiers)
我真的希望我说清楚了!谢谢
【问题讨论】:
标签: java