我有一个类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
为什么?
答案 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
变量。