菜鸟求助,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

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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