这可能是一个愚蠢的问题,但在我的代码中,当在面板上执行 mouseClicked 时,循环条件中的项与<的项参数相同强> ItemDialog
for (Item item: itemsList) {
JPanel panel = new ItemPanel(item);
panel.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent arg0) {
new ItemDialog(item);
}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {}
public void mouseReleased(MouseEvent arg0) {}
});
答案 0 :(得分:3)
是的,这是一个简单的答案。
但是,就像我在评论中所说,这里有很多事情发生了!
匿名内部类令人困惑:与Javascript中的闭包相似。
他们可以访问自己定义的变量。他们可以仍然在将来的任意点访问那些相同的变量引用,即使该变量超出范围。使这成为可能的规则是必须将这些变量声明为final
。
这篇文章比我更好地解释了这些机制:How does java implement inner class closures?
抛开:自Java 8起,编译器自动生成每个Item item
变量final
,因为它会发现它们在您的匿名内部类中被使用。所以他们实际上变成了:
for (final Item item: itemsList) {