菜鸟求助,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#
全部评论
Mark一下,难不成是这种lambda表达式的用法≠匿名内部类的用法?
点赞 回复 分享
发布于 2019-11-14 17:09
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

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
点赞 2 评论
分享
牛客网
牛客企业服务