Chúng không phải là trọng lượng nhẹ, nhưng chúng có giới hạn. AFAIK, bạn không thể tạo nhiều hơn một thể hiện của một lớp bên trong vô danh, và vì vậy nếu nhu cầu của bạn yêu cầu điều này, bạn phải sử dụng một lớp không ẩn danh.
chỉnh sửa 1: Cảm ơn tất cả các nhận xét và giải thích. Xin hãy giúp tôi hiểu điều này tốt hơn ... Tôi hiểu rằng bạn có thể có nhiều phiên bản của các lớp bên trong vô danh, nhưng nếu tôi khai báo một đối tượng ActionListener bên trong ẩn danh, làm cách nào tôi có thể có nhiều phiên bản mà lớp và chỉ có lớp đó mà không sử dụng sự phản chiếu? Cảm ơn trước (hoặc tôi nên hỏi điều này trong câu hỏi của riêng tôi?)!
OK, vì tôi không nhận được bất kỳ vết cắn nào ... Hãy để tôi chứng minh bằng mã. Giả sử tôi tạo một ActionListener ẩn danh tại đây:
JButton button = new JButton("Button");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Button says \"Foo!\"");
}
});
JOptionPane.showMessageDialog(null, button);
Tôi tạo một ActionListener ẩn danh và cũng tạo đối tượng của lớp này trong một lần ngã. Những gì tôi đã luôn luôn được dạy, những gì tôi đã đề cập ở trên cùng của bài viết của tôi ở đây (và được dinged cho), đó là khó khăn nếu không phải là không thể (không có sự kỳ diệu của sự phản ánh) để làm cho một đối tượng của lớp vô danh này, chỉ có một đối tượng có thể được thực hiện, và trong những tình huống mà chỉ có một đối tượng là cần thiết, điều này là tốt. Nhưng trong các tình huống khác, nó không ổn. Và chắc chắn, bạn có thể tạo nhiều lớp ActionListener ẩn danh tương tự, như trong vòng lặp for:
JPanel panel = new JPanel(new GridLayout(5, 5));
JButton[] buttons = new JButton[25];
for (int i = 0; i < 25; i++) {
final int btnNumber = i;
buttons[i] = new JButton(String.valueOf(btnNumber));
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("From button " + btnNumber);
}
});
panel.add(buttons[i]);
}
JOptionPane.showMessageDialog(null, panel);
Nhưng dù vậy, mỗi lớp ẩn danh được tạo ở đây khác nhau. Điều này có thể có ý nghĩa nếu cùng loại người nghe này được sử dụng bởi nhiều JButtens, rằng nó có trạng thái, và hành vi của nó phụ thuộc vào trạng thái này. Đồng ý? Không đồng ý? Đặc biệt cảm ơn vì bất cứ đóng góp nào!
JVM chỉ có các kiểu dữ liệu nguyên thủy ('int',' float', v.v.) và các lớp. Không có gì giữa chúng. – Gabe