Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法“导入静态”静态嵌套类?_Java_Import_Compilation_Static_Package - Fatal编程技术网

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需要完全限定。从这一点来看,编译器要求提供包名的约定,可能是为了避免类用法的歧义,“静态内部”在术语上是矛盾的。