Static import from default package ?
Ulf Zibis
Ulf.Zibis at gmx.de
Wed Mar 28 13:34:46 PDT 2012
Much thanks Dan,
-Ulf
Am 28.03.2012 21:38, schrieb Dan Smith:
> I looked for some clarification from the spec. I think the problem is that A is not in scope.
>
> - 7.5.4: The static-import name must be a TypeName and it must be a canonical name
> - 6.5.5.1: The meaning of an unqualified TypeName is the matching in-scope type declaration, assuming there is exactly one
> - 6.3: The scope of a top-level type is "all type declarations" (_not_ all compilation units) in the same package
>
> This odd scoping rule allows imports to get around certain name conflicts between types and packages:
>
> ---
> package A; public class Foo {}
> ---
> public class A { String Foo = "x"; }
> ---
> import A.Foo;
> class Test {
> Foo f1; // ok
> A.Foo f2; // error: A.Foo is a field, not a type
> }
> ---
>
> I think the JLS's giving a type in an unnamed package a "canonical name" (6.7) is pointless, because you can't use that canonical name in an import due to the scoping rules, and it's not even a unique identifier, since a system can have multiple unnamed packages (7.4.2). So I prefer to explain your example with the (apocryphal) claim that you can't refer to "A" in an import because it doesn't have a canonical name.
>
> —Dan
>
> On Mar 28, 2012, at 8:59 AM, Ulf Zibis wrote:
>
>> Hi all,
>>
>> is there any reason, why we can't import static from class in default package?
>>
>> Example:
>> class A {
>> static final type CONSTANT = 123;
>> static final type method() {...};
>> }
>>
>> import static A.*;
>> class B {
>> static final type HERE = CONSTANT;
>> static final type now() { return method(); };
>> }
>>
>> Use case:
>> JDK's jtreg tests (based on default package).
>>
>> Regards,
>>
>> Ulf
>>
>>
>
More information about the compiler-dev
mailing list