我剛開始在Java 8中圍繞lambda表達式工作。我對effectively final
有點困惑。lambda表達式和全局變量
初始化局部變量是effectively final
但是全局變量呢,我可以改變全局變量的值並在lambda表達式中使用它。那麼局部變量背後的原因是什麼,應該是effectively final
。我找不到任何文章或關於此的javadoc。
import java.util.ArrayList;
import java.util.List;
public class Main {
private String lastname = "Thakor";
public static void main(String[] args) {
Main objMain = new Main();
objMain.test();
}
public void test(){
List<String> listStrings = new ArrayList<String>();
listStrings.add("Vicky");
listStrings.add("Thakor");
String middlename = "V";
//Local variable middlename defined in an enclosing scope must be final or effectively final
/* middlename = "T";*/
/**
* In case of global variable, why lambda expression not throwing error...
* Local variable middlename defined in an enclosing scope must be final or effectively final
*/
lastname = "T";
listStrings.stream()
.forEach(firstname ->{
System.out.println("Firstname: " + firstname);
System.out.println("Middle: " + middlename);
System.out.println("Lastname: " + lastname);
System.out.println("--------------------------------------");
});
}
}
輸出
(http://stackoverflow.com/questions/20938095/difference-between-final-and-effectively-final) –
@JordiCastilla,沒有真正 – shmosel
@JordiCastilla我知道[最終和最終有效區別]的可能重複差異,但我問全球變量。 –