-
Bug
-
Resolution: Duplicate
-
P4
-
6u26, 7
-
x86
-
windows_7
FULL PRODUCT VERSION :
javac 1.6.0_27
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) Client VM (build 20.2-b06, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Windows 7
A DESCRIPTION OF THE PROBLEM :
If a class defines a nested enumeration which implements an interface from another package and you import that interface and also statically import the enumeration, then it will fail to build with an error indicating that it cannot find the symbol of the interface.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Create the following interface:
package pkg.subpkg;
public interface ID { }
And the following class:
package pkg;
import static pkg.Demo.DemoID.*;
import pkg.subpkg.ID;
public class Demo {
public static enum DemoID implements ID { A, B, C }
public static void main( String[] args ) {
System.out.println( A );
}
}
Now, try to compile and you will get the following error:
pkg\Demo.java:8: cannot find symbol
symbol: class ID
location: class pkg.Demo
public static enum DemoID implements ID { A, B, C }
1 error
However, if you don't use the static import and qualify references to the enum with the name of the enum, it will compile:
System.out.println( DemoID.A );
Or, if you fully qualify the name of ID in the enum declaration, it will compile:
public static enum DemoID implements pkg.subpkg.ID { A, B, C }
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I would expect that imported interfaces would work regardless of whether they are applied to statically imported nested interface...
I would expect that the example code I provided would compile.
ACTUAL -
pkg\Demo.java:8: cannot find symbol
symbol: class ID
location: class pkg.Demo
public static enum DemoID implements ID { A, B, C }
1 error
ERROR MESSAGES/STACK TRACES THAT OCCUR :
pkg\Demo.java:8: cannot find symbol
symbol: class ID
location: class pkg.Demo
public static enum DemoID implements ID { A, B, C }
1 error
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package pkg.subpkg;
public interface ID { }
--------------------------------------------------------
package pkg;
import static pkg.Demo.DemoID.*;
import pkg.subpkg.ID;
public class Demo {
public static enum DemoID implements ID { A, B, C }
public static void main( String[] args ) {
System.out.println( A );
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
list the fully qualified class name for the interfaces you apply to nested enums which are statically imported.
javac 1.6.0_27
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) Client VM (build 20.2-b06, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Windows 7
A DESCRIPTION OF THE PROBLEM :
If a class defines a nested enumeration which implements an interface from another package and you import that interface and also statically import the enumeration, then it will fail to build with an error indicating that it cannot find the symbol of the interface.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Create the following interface:
package pkg.subpkg;
public interface ID { }
And the following class:
package pkg;
import static pkg.Demo.DemoID.*;
import pkg.subpkg.ID;
public class Demo {
public static enum DemoID implements ID { A, B, C }
public static void main( String[] args ) {
System.out.println( A );
}
}
Now, try to compile and you will get the following error:
pkg\Demo.java:8: cannot find symbol
symbol: class ID
location: class pkg.Demo
public static enum DemoID implements ID { A, B, C }
1 error
However, if you don't use the static import and qualify references to the enum with the name of the enum, it will compile:
System.out.println( DemoID.A );
Or, if you fully qualify the name of ID in the enum declaration, it will compile:
public static enum DemoID implements pkg.subpkg.ID { A, B, C }
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I would expect that imported interfaces would work regardless of whether they are applied to statically imported nested interface...
I would expect that the example code I provided would compile.
ACTUAL -
pkg\Demo.java:8: cannot find symbol
symbol: class ID
location: class pkg.Demo
public static enum DemoID implements ID { A, B, C }
1 error
ERROR MESSAGES/STACK TRACES THAT OCCUR :
pkg\Demo.java:8: cannot find symbol
symbol: class ID
location: class pkg.Demo
public static enum DemoID implements ID { A, B, C }
1 error
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package pkg.subpkg;
public interface ID { }
--------------------------------------------------------
package pkg;
import static pkg.Demo.DemoID.*;
import pkg.subpkg.ID;
public class Demo {
public static enum DemoID implements ID { A, B, C }
public static void main( String[] args ) {
System.out.println( A );
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
list the fully qualified class name for the interfaces you apply to nested enums which are statically imported.
- duplicates
-
JDK-7198878 Annotation import not recognized
-
- Closed
-
-
JDK-7101822 Compiling depends on order of imports
-
- Closed
-
- relates to
-
JDK-6391197 static import seems to hide non-static import in a very special case
-
- Closed
-
-
JDK-7101822 Compiling depends on order of imports
-
- Closed
-