关于Java匿名内部类访问局部变量问题?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于Java匿名内部类访问局部变量问题?报错

爱吃鱼的程序员 2020-06-20 19:21:03 111

为什么netbeans不提示要使用final修饰局部变量,连警告都没有,而且可以运行,而Eclipse却直接报错,要求使用final,环境是JDK8,Netbeans8.0,Eclipse,为什么两个IDE不一样?这里发图不方便,下面这个链接可以看看截图 http://zhidao.baidu.com/question/582953016348781245.html?quesup2&oldq=1

IDE Java 开发工具 Android开发
分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-20 19:21:19

    确定在netbeans里能运行吗?

    在java8语法里面是支持的,你的eclipse没有更新的原因。在eclipse-jee-kepler-SR2-Java8-win32中,使用java8,类似你那代码是能通过编译的。

    在java8里面,可以简单认为,如果一个变量加上final之后,程序不会报错,也就是说这个变量自初始化之后再没有赋值过(这叫effectivelyfinal),那么就可以跟加final的变量一样被内部类引用。

    既然用java8.那么可以这么写:addActionListener(e->{if....else...});

    lambda里面如果引用外部变量,那么必须是final类型,当然你可以不声明final修饰符。但是jvm会自动转换为final.

    如下代码:

    intnum=0;



    addActionListener(e->num++);//Error



    addActionListener(e->System.out.println(num));//OK,Num被转为finalnum++//Error,





    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程