私はJava 8ストリームを勉強していますが、ラムダを理解するのはlambdas例えば(そして静的な)変数です。ほとんどのページは「効果的に最終的」であるという定義について話すだけなので、私はそれをオンラインで参照することはできないようです。なぜ「ラムダ式で使用される変数は最終的に有効であるか、最終的には最終的なものでなければならない」という警告がインスタンス変数では無視される
public class LambdaTest {
int instanceCounter = 0;
public void method() {
int localCounter = 0;
instanceCounter = 5; //Re-assign instance counter so it is no longer effectively final
Stream.of(1,2,3).forEach(elem -> instanceCounter++); //WHY DOES THE COMPILER NOT COMPLAIN HERE
Stream.of(1,2,3).forEach(elem -> localCounter++); //Does not compile because localCounter is not effectively final
}
}