开发者社区> 问答> 正文

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

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

展开
收起
爱吃鱼的程序员 2020-06-20 19:21:03 508 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    确定在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,





    2020-06-20 19:21:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载