java - Why can you import a class with the same name as a nested class? -


consider following code:

import java.util.calendar;  class demo {     class calendar {}      public static void main (string[] args) {       // system.out.println(calendar.day_of_week);  // error.     } } 

this code compiles fine; if refer calendar within demo, referring demo.calendar, not java.util.calendar.

the import redundant; seems strange allowed, considering you're not allowed import class same simple name top-level class defined in same compilation unit (per jls sec 7.5.1):

import java.util.calendar;  // error: calendar defined in compilation unit  class calendar {} 

is there practical reason why such import in first code example not compile-time error?

the case can come have twice (or more) -nested class same name import:

import java.util.calendar;  class demo {   static class nested {     static class calendar {}      static void usenested() {       system.out.println(calendar.class);  // demo.nested.calendar     }   }    static void useimported() {     system.out.println(calendar.class);  // java.util.calendar   }    public static void main(string[] args) {     nested.usenested();     useimported();   } } 

ideone demo

in case, nested calendar isn't automatically visible outside scope of nested class, imported calendar class used outside, e.g. in useimported method.

i wouldn't describe "practical" use, though - it's plain confusing used in each context, , worth avoiding. still interested me case exists, though.


i suppose there similar case:

import java.util.calendar;  class demo {   static void useimported() { ... } }  class demo2 {   class calendar {}    static void usenested() { ... } } 

(where these classes in same compilation unit). same idea above.


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -