-
Bug
-
Resolution: Fixed
-
P2
-
21
javac reports the following definite assignment error after the fix for JDK-8043179. The error is surprising to me, since the lambda doesn't reference 'x' at all. Is this expected?
$ cat T.java
public class T {
private final int x;
public T() {
try {
Runnable r =
() -> {
try {
return;
} catch (Exception e) {
throw new AssertionError(e);
}
};
} catch (Exception e) {
}
x = 42;
}
}
$ javac -fullversion T.java
javac full version "20-ea+35-2342"
OK
$ javac -fullversion T.java
javac full version "21-ea+16-1326"
T.java:17: error: variable x might already have been assigned
x = 42;
^
1 error
$ cat T.java
public class T {
private final int x;
public T() {
try {
Runnable r =
() -> {
try {
return;
} catch (Exception e) {
throw new AssertionError(e);
}
};
} catch (Exception e) {
}
x = 42;
}
}
$ javac -fullversion T.java
javac full version "20-ea+35-2342"
OK
$ javac -fullversion T.java
javac full version "21-ea+16-1326"
T.java:17: error: variable x might already have been assigned
x = 42;
^
1 error
- relates to
-
JDK-8043179 Lambda expression can mutate final field
-
- Resolved
-