【问题标题】:Accesing variable from an inner class in java [duplicate]从java中的内部类访问变量[重复]
【发布时间】:2017-10-26 09:03:35
【问题描述】:

我想通过mouseClicked 方法访问i。有人可以帮我解决这个问题吗?

这是我的代码片段 -

for (int i = 0; i < 9; i++) {
        JLabel jl = new JLabel(String.valueOf(i));
        jl.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {

                        addAnEventToLabel(i); //Error 1
            }
        });
    }

错误 1 ​​- 从内部类引用的局部变量必须是最终的或有效的最终(在 IDE 中显示) 但没有运行时或编译时异常。

【问题讨论】:

  • 是的,错误消息说明了这一点。也许您可以将 i 的值分配给局部 final 变量,然后访问它
  • @Jack 是的,我创建了一个局部最终变量。现在我可以访问它了。
  • @JackFlamp 你能解释一下为什么没有运行时或编译时例外吗?
  • 查看下面的 gperches 答案

标签: java mouseevent inner-classes mouselistener anonymous-inner-class


【解决方案1】:

你应该可以做到:

for (int i = 0; i < 9; i++) {
    final int tmpI = i;
    JLabel jl = new JLabel(String.valueOf(i));
    jl.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {

                    addAnEventToLabel(tmpI);
        }
    });
}

【讨论】:

  • 很好,我们同时写了同样的东西。这一定是解决方案:)
  • 成功了。多谢兄弟。想了解更多关于 Java 内部类的知识。
  • @gpeche 为什么我的代码没有运行时或编译时异常?
  • @Nazeer 这是一个编译错误,它违反了语言规则,所以编译器只是拒绝从中生成可执行文件。异常用于编译器无法知道程序是否失败,因此不能拒绝编译源代码的情况。
  • 编译错误?有趣..谢谢男人。我会对此做更多的研究
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 2011-06-15
相关资源
最近更新 更多