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(); } }
上面的代码生成以下结果。