不能`导入静态`静态内部类?

时间:2013-05-16 19:28:00

标签: java import static compilation namespaces

我有一个类A,里面有一个名为B的静态内部类:

import static A.B.*;

class A {
    static class B {
        static int x;
        static int y;
    }
    public static void main(String[] args) {
        System.out.println(x);
    }
}

我想静态导入B中的所有内容,但它不起作用:

$ javac A.java
A.java:1: package A does not exist
import static A.B.*;
               ^
A.java:9: cannot find symbol
symbol  : variable x
location: class A
        System.out.println(x);
                           ^
2 errors

为什么?

2 个答案:

答案 0 :(得分:10)

如果A在默认包中,则无效。但是,您可以添加包声明:

package mypackage;

并使用

import static mypackage.A.B.*;

来自JLS的静态导入语法:

  

SingleStaticImportDeclaration:       import static TypeName 。标识符;

其中 TypeName 必须为full qualified

Using Package Members中,static import语法包含包名:

import static mypackage.MyConstants.*;

It is recommended非常谨慎地使用static次导入。

答案 1 :(得分:1)

应该是

import <the-package-for-the-class-A>.A.B.*;

如果A在默认包中,则会失败。

最后,导入*不是一个好习惯。在这种情况下,只需导入您需要的内容 - import static <the-package-for-the-class-A>.A.B.x;,如果您只使用x变量。