菜鸟求助,lambda表达式使用问题

static {

        Thread t1 = new Thread(new Runnable() { 
             @Override     
             public void run() {
                System.out.println(abc); //works

            }
        });

        Thread t2 = new Thread(() -> {
            System.out.println(abc);  //illegal forward reference
        });

        t1.start();
        t2.start();
    }

    private static String abc = "test"; //declare after static block

    public static void main(String args[]) {
        System.out.println("main:" + DataAnalyseTest.abc);
    }
第一种声明方式为什么可以使用后面的静态变量但是第二种不可以。。。#Java#
全部评论
https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3.2.3 Workaround: Class SomeClass{     static {         Thread t1 = new Thread(new Runnable() {             @Override                 public void run() {                 System.out.println(abc); //works             }         });         Thread t2 = new Thread(() -> {             System.out.println(SomeClass.abc);             //                 ^-- now works         });         t1.start();         t2.start();     }     private static String abc = "test"; //declare after static block     public static void main(String args[]) {         System.out.println("main:" + DataAnalyseTest.abc);     } }
点赞 回复 分享
发布于 2019-11-19 22:04
Mark一下,难不成是这种lambda表达式的用法≠匿名内部类的用法?
点赞 回复 分享
发布于 2019-11-14 17:09

相关推荐

01-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 不建议写那么大,可以从小出发更容易
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务