Java 无法“导入静态”静态嵌套类?
我有一个类Java 无法“导入静态”静态嵌套类?,java,import,compilation,static,package,Java,Import,Compilation,Static,Package,我有一个类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.
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
为什么?应该是
import <the-package-for-the-class-A>.A.B.*;
import.A.B.*;
如果默认包中有,则此操作将失败
最后,导入
*
不是一个好做法。只需导入您需要的东西,在本例中-importstatic.A.B.x
如果只使用x
变量。如果A
在默认包中,则此操作无效。但是,您可以添加包声明:
package mypackage;
和使用
import static mypackage.A.B.*;
中的静态导入语法如下所示:
SingleStaticImportDeclaration:
导入静态类型名。标识符
其中TypeName是必需的
在静态导入
中,给出了包含包名的语法:
import static mypackage.MyConstants.*;
使用
静态
导入时非常节省 “导入*”即使它来自同一个文件,也是不好的做法?什么?我确实使用了导入,否则我就不会问JLS这个问题了,似乎类TypeName需要完全限定。从这一点来看,编译器要求提供包名的约定,可能是为了避免类用法的歧义,“静态内部”在术语上是矛盾的。