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(); } } 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
Post a Comment