-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
6u10
-
x86
-
linux
FULL PRODUCT VERSION :
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8) (6b18-1.8-0ubuntu1)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux antigua 2.6.32-22-generic #36-Ubuntu SMP Thu Jun 3 19:31:57 UTC 2010 x86_64 GNU/Linux
EXTRA RELEVANT SYSTEM CONFIGURATION :
Using Ubuntu 10.04 with Java from package openjdk-6-jdk version 6b18-1.8-0ubuntu1
A DESCRIPTION OF THE PROBLEM :
The java compiler produces an error message when casting an object to a type, which is a non-static inner class of a generic outer class (e.g Test<?>.Inner). The same type is valid for variable declarations and for instanceof expression.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile the supplied java code with javac.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
a .class file
ACTUAL -
three error messages about syntax errors
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Test.java:12: ')' expected
i = (Test<?>.Inner) o;
^
Test.java:12: ';' expected
i = (Test<?>.Inner) o;
^
Test.java:12: illegal start of expression
i = (Test<?>.Inner) o;
^
3 errors
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
class Test<T> {
class Inner {}
public static void main(String args[]) {
Test<?> t = new Test<Object>();
Object o = t.new Inner();
Test<?>.Inner i;
if (o instanceof Test<?>.Inner) {
i = (Test<?>.Inner) o;
}
}
}
---------- END SOURCE ----------
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8) (6b18-1.8-0ubuntu1)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux antigua 2.6.32-22-generic #36-Ubuntu SMP Thu Jun 3 19:31:57 UTC 2010 x86_64 GNU/Linux
EXTRA RELEVANT SYSTEM CONFIGURATION :
Using Ubuntu 10.04 with Java from package openjdk-6-jdk version 6b18-1.8-0ubuntu1
A DESCRIPTION OF THE PROBLEM :
The java compiler produces an error message when casting an object to a type, which is a non-static inner class of a generic outer class (e.g Test<?>.Inner). The same type is valid for variable declarations and for instanceof expression.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile the supplied java code with javac.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
a .class file
ACTUAL -
three error messages about syntax errors
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Test.java:12: ')' expected
i = (Test<?>.Inner) o;
^
Test.java:12: ';' expected
i = (Test<?>.Inner) o;
^
Test.java:12: illegal start of expression
i = (Test<?>.Inner) o;
^
3 errors
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
class Test<T> {
class Inner {}
public static void main(String args[]) {
Test<?> t = new Test<Object>();
Object o = t.new Inner();
Test<?>.Inner i;
if (o instanceof Test<?>.Inner) {
i = (Test<?>.Inner) o;
}
}
}
---------- END SOURCE ----------
- duplicates
-
JDK-6665356 Cast not allowed when both qualifying type and inner class are parameterized
- Closed