美文网首页
关于lamada表达式变量作用域的几点说明

关于lamada表达式变量作用域的几点说明

作者: 江南Ryan | 来源:发表于2018-11-15 15:42 被阅读0次
    /*
    * Lamada表达式的变量作用域
     */
    public class Test06 {
    
        public static void main(String[] args) {
    
            /**
             * lamada表达式有三个部分:
             * 1)一个代码块
             * 2)参数
             * 3)自由变量的值,这是指非参数而且不在代码中定义的变量
             */
    
            countDown(10, 10);
        }
    
        //1,在lamada表达式中,只能引用值不会改变的变量,如下面的一个就是不合法的:
        private static void countDown(int start, int delay) {
            ActionListener listener = event ->
            {
                start--;//Error: Can't mutate captured varible;
                System.out.println(start);
            };
            new Timer(delay, listener).start();
    
        }
    
        //2,在lamada表达式中引用变量,而这个变量可能在外部改变,这也是不合法的。
        private static void repeat(String text, int count) {
            for (int i = 0; i < count; i++) {
                ActionListener listener = event ->
                {
                    System.out.println(i + ": " + text);//Error: Cannot refer to changing i
                };
                new Timer(1000, listener).start();
            }
    
        }
    
        //3,在lamada表达式中声明与一个局部变量同名的参数或局部变量是不合法的
        Path firth = Paths.get("/usr/bin");
        Comparator<String> comp =
                (first, second) -> first.length() - second.length();//Error:Varible first already defined
    
    
    }
    

    相关文章

      网友评论

          本文标题:关于lamada表达式变量作用域的几点说明

          本文链接:https://www.haomeiwen.com/subject/ncmyfqtx.html