-
Bug
-
Resolution: Fixed
-
P2
-
6
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2163376 | 6u10 | Maurizio Cimadamore | P3 | Resolved | Fixed | b26 |
JDK-2165585 | OpenJDK6 | Joe Darcy | P3 | Resolved | Fixed | b12 |
FULL PRODUCT VERSION :
JDK6 release
ADDITIONAL OS VERSION INFORMATION :
All platforms
EXTRA RELEVANT SYSTEM CONFIGURATION :
All configurations
A DESCRIPTION OF THE PROBLEM :
The following code should compile without error, and did compile without error until very late in the JDK6 candidates
frog:~/tmp$ cat -n F.java
1 enum Foo {
2 A, B;
3 Foo() {
4 Object x = Foo.class;
5 }
6 }
frog:~/tmp$ /usr/local/jdk6/bin/java -version
java version "1.6.0-rc"
Java(TM) SE Runtime Environment (build 1.6.0-rc-b104)
Java HotSpot(TM) Client VM (build 1.6.0-rc-b104, mixed mode, sharing)
frog:~/tmp$ /usr/local/jdk6/bin/javac F.java
F.java:4: illegal reference to static field from initializer
Object x = Foo.class;
^
1 error
frog:~/tmp$
REGRESSION. Last worked in version mustang
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See description
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Code should compile without error.
ACTUAL -
javac rejects the code, as shown in the description.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
F.java:4: illegal reference to static field from initializer
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
enum Foo {
A, B;
Foo() {
Object x = Foo.class;
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Use Class.forName instead of a class literal. Unfortunately, the result of Class.forName doesn't have the same generic type as the class literal.
JDK6 release
ADDITIONAL OS VERSION INFORMATION :
All platforms
EXTRA RELEVANT SYSTEM CONFIGURATION :
All configurations
A DESCRIPTION OF THE PROBLEM :
The following code should compile without error, and did compile without error until very late in the JDK6 candidates
frog:~/tmp$ cat -n F.java
1 enum Foo {
2 A, B;
3 Foo() {
4 Object x = Foo.class;
5 }
6 }
frog:~/tmp$ /usr/local/jdk6/bin/java -version
java version "1.6.0-rc"
Java(TM) SE Runtime Environment (build 1.6.0-rc-b104)
Java HotSpot(TM) Client VM (build 1.6.0-rc-b104, mixed mode, sharing)
frog:~/tmp$ /usr/local/jdk6/bin/javac F.java
F.java:4: illegal reference to static field from initializer
Object x = Foo.class;
^
1 error
frog:~/tmp$
REGRESSION. Last worked in version mustang
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See description
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Code should compile without error.
ACTUAL -
javac rejects the code, as shown in the description.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
F.java:4: illegal reference to static field from initializer
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
enum Foo {
A, B;
Foo() {
Object x = Foo.class;
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Use Class.forName instead of a class literal. Unfortunately, the result of Class.forName doesn't have the same generic type as the class literal.
- backported by
-
JDK-2163376 javac rejects class literals in enum constructors
- Resolved
-
JDK-2165585 javac rejects class literals in enum constructors
- Resolved