gpt4 book ai didi

java - for 循环中的匿名监听器

转载 作者:行者123 更新时间:2023-11-29 05:06:23 29 4
gpt4 key购买 nike

这可能是个愚蠢的问题,但在我的代码中,当在面板上执行 mouseClicked 时,循环条件中的 item 将与 < 的 item 参数相同strong>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) {}
});

最佳答案

是的,这是简单的答案。

但是,正如我在评论中所说,这里发生了很多事情!

匿名内部类令人困惑:类似于 Javascript 中的闭包。

他们可以访问在他们之外定义的变量。他们可以仍然在未来的任意点访问那些相同的变量引用,即使变量在其他情况下超出范围也是如此。使这成为可能的规则是这些变量必须声明为 final

这篇文章比我更好地解释了机制:How does java implement inner class closures?

旁白:从 Java 8 开始,编译器自动将您的每个 Item item 变量设为 final,因为它发现它们被用于你的匿名内部类。所以他们实际上变成了:

for (final Item item: itemsList) {

关于java - for 循环中的匿名监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30239031/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com