[語法] 用Lambda表示法為何變數名稱不能一樣?

作者: liu2007 (è–¯)   2019-08-07 14:24:12
我今天才知道這個表示法(太久沒碰Q_Q)
編譯器顯示綠色行錯誤,我不太確定正式的原因
只知道變數名稱不要用x,y就能夠通過編譯
在使用Lambda表示法的時候,input部分的變數名稱為何不能與已宣告的變數名稱重複呢?
我以為在java裡面,宣告就等於是創建一個子域,變數的對象都算在子域裡
如下方黃色所宣告的x,y
可以請教一下到底要怎麼解釋這個錯誤的原因呢?
public class NewClass {
public static void main(String[] args) throws Exception {
int x = 3;
int y = 1;
B name = new B() {
@Override
public void test(int x, int y) {
// TODO Auto-generated method stub
}
};
B b = (x, y) -> System.out.println("test: " + (x + y));
b.test(x, y);
}
public interface B {
public void test(int x, int y);
}
}
作者: ssccg (23)   2019-08-07 15:15:00
docs.oracle.com/javase/specs/jls/se12/html/jls-15.htmllambda expression跟anonymous class是不一樣的在lambda body裡面的變數名稱、this、super都跟surroundingcontext相同(除新增了lambda parameter定義的名稱)用你的說法就是lambda expression不會創建子域

Links booklink

Contact Us: admin [ a t ] ucptt.com