lambda表達(dá)式不定義自己的范圍。
如果我們?cè)趌ambda中使用關(guān)鍵字 this
和 super
表達(dá)式在方法中,它們的行為與我們?cè)谠摲椒ㄖ惺褂盟鼈円粯印?/p>
以下代碼從lambda表達(dá)式輸出this。這在lambda表達(dá)式中是指外部類(lèi)不是lambda表達(dá)式本身。
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(); } }
上面的代碼生成以下結(jié)果。
Main方法中的第一行具有 x
的變量定義。
如果我們刪除注釋?zhuān)覀儠?huì)得到編譯時(shí)錯(cuò)誤,因?yàn)樗clambda表達(dá)式的變量定義沖突。
這是另一個(gè)演示,顯示lambda表達(dá)式與其外部方法具有相同的范圍。 lambda表達(dá)式不會(huì)創(chuàng)建自己的作用域。
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(); } }
上面的代碼生成以下結(jié)果。
更多建議: