Java Lambda表达式作用域

Java Lambda表达式作用域

lambda表达式不定义自己的范围。

如果我们在lambda中使用关键字 this super 表达式在方法中,它们的行为与我们在该方法中使用它们一样。

例子

以下代码从lambda表达式输出this。这在lambda表达式中是指外部类不是lambda表达式本身。

import java.util.function.Function;

public class Main {
  public Main(){
    Function<String,String> func1 = x -> {System.out.println(this);return x ;};
    System.out.println(func1.apply(""));
  }
  public String toString(){
    return "Main";
  }
  public static void main(String[] argv) {
    new Main();
  }
}

上面的代码生成以下结果。

例2

Main方法中的第一行具有 x 的变量定义。

如果我们删除注释,我们会得到编译时错误,因为它与lambda表达式的变量定义冲突。

这是另一个演示,显示lambda表达式与其外部方法具有相同的范围。 lambda表达式不会创建自己的作用域。

import java.util.function.Function;

public class Main {
  public Main(){
    //int x= 0;
    Function<String,String> func1 = x -> {System.out.println(this);return x ;};
    System.out.println(func1.apply(""));
  }
  public String toString(){
    return "Main";
  }
  public static void main(String[] argv) {
    new Main();
  }
}

上面的代码生成以下结果。

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Java Lambda表达式作用域》
文章链接:https://zhuji.vsping.com/294143.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。