-
Bug
-
Resolution: Unresolved
-
P4
-
6u23
-
Cause Known
-
x86
-
windows_7
FULL PRODUCT VERSION :
1.6.0_18
ADDITIONAL OS VERSION INFORMATION :
Windows 7 Enterprise 64-bit
A DESCRIPTION OF THE PROBLEM :
Javac (any version) compiles the attached code without error, but when Main is run it prints "X.Q" instead of "A<T>.X.Q" as required by the language specification. I think this is really a shortcoming of the specification for circular class declarations, but demonstrating my point is easier if I just start by reporting it as a compiler bug.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run attached program
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
A<T>.X.Q
-or-
Compilation error complaining about base class circularity.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
class A<T> {
static class X {
static class Q {
public static void main() {
System.out.println("A<T>.X.Q");
}
}
}
}
class B extends A<B.Y.Q> {
static class Y extends X { } // X here is inherited from A
}
class X {
static class Q {
public static void main() {
System.out.println("X.Q");
}
}
}
class Main {
public static void main(String[] args) {
B.Y.Q.main();
}
}
---------- END SOURCE ----------
1.6.0_18
ADDITIONAL OS VERSION INFORMATION :
Windows 7 Enterprise 64-bit
A DESCRIPTION OF THE PROBLEM :
Javac (any version) compiles the attached code without error, but when Main is run it prints "X.Q" instead of "A<T>.X.Q" as required by the language specification. I think this is really a shortcoming of the specification for circular class declarations, but demonstrating my point is easier if I just start by reporting it as a compiler bug.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run attached program
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
A<T>.X.Q
-or-
Compilation error complaining about base class circularity.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
class A<T> {
static class X {
static class Q {
public static void main() {
System.out.println("A<T>.X.Q");
}
}
}
}
class B extends A<B.Y.Q> {
static class Y extends X { } // X here is inherited from A
}
class X {
static class Q {
public static void main() {
System.out.println("X.Q");
}
}
}
class Main {
public static void main(String[] args) {
B.Y.Q.main();
}
}
---------- END SOURCE ----------
- relates to
-
JDK-6863462 Unclear specification: circular class hierarchy dependency via static imports
- Open
-
JDK-6863465 javac doesn't detect circular subclass dependencies via qualified names
- Closed