在下面的工作代碼,匿名內部類 - javac如何與lambda表達式一起工作?
package com.ca.naive;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TodoGUI {
public static void main(String[] args) {
List list = new List();
TextField itemField = new TextField();
Button addButton = new Button("Add");
Button removeButton = new Button("Remove");
addButton.addActionListener(e -> list.add(itemField.getText()));
removeButton.addActionListener(e -> list.remove(list.getSelectedIndex()));
Panel buttons = new Panel(new GridLayout(1,0,3,3));
buttons.add(addButton);
buttons.add(removeButton);
Panel bottomPanel = new Panel(new FlowLayout(FlowLayout.RIGHT));
bottomPanel.add(buttons);
Panel centerPanel = new Panel(new BorderLayout());
centerPanel.add(BorderLayout.NORTH, itemField);
centerPanel.add(BorderLayout.SOUTH, buttons);
Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(BorderLayout.WEST, list);
frame.add(BorderLayout.CENTER, centerPanel);
frame.pack();
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setVisible(true);
}
}
是否javac的替代addButton.addActionListener(e -> list.add(itemField.getText()));
語法與
addButton.addActionListener(new java.awt.Event.ActionListener() {
public void actionPerformed(java.awt.Event.ActionEvent e) {
list.add(itemField.getText());
}
});
?
_ [an'import'語句] ...允許您使用單個標識符(例如'List','min')來引用類型或靜態成員,而不是完全限定的名稱(例如'java .util.List','Math.min')_你沒有使用類型名稱,所以你不需要'import'語句。 –
@SotiriosDelimanolis你的意思是,'javac'通過檢測傳遞給'addButton.addActionListener()'的對象的類型在內部解析類型名稱'ActionListener'?在提出此查詢之前,您的評論的第一部分是已知的 – overexchange
是的,它知道您嘗試調用的方法需要一個'ActionListener'。據推測,這是唯一適用的方法。但是對於_resolve name_,則不需要解析名稱,因爲您沒有使用名稱。 'import'語句只是簡化了源代碼。他們什麼都不做。 –