【问题标题】:Cannot `import static` static nested class?不能“导入静态”静态嵌套类?
【发布时间】:2013-05-11 20:13:48
【问题描述】:

我有一个类 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

为什么?

【问题讨论】:

  • '静态内部'是一个矛盾的术语。

标签: java import compilation static package


【解决方案1】:

如果A 在默认包中,这将不起作用。但是,您可以添加一个包声明:

package mypackage;

并使用

import static mypackage.A.B.*;

给出来自JLS 的静态导入语法:

SingleStaticImport声明: 导入静态 TypeName 。标识符;

其中 TypeName 必须是 full qualified

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

import static mypackage.MyConstants.*;

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

【讨论】:

  • 从 JLS 看来,TypeName 类似乎需要完全限定。由此判断,编译器要求包名的约定存在,可能是为了避免类用法的歧义
【解决方案2】:

应该是

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

如果 A 在默认包中,这将失败。

最后,导入* 不是一个好习惯。只导入你需要的东西,在这种情况下 - import static &lt;the-package-for-the-class-A&gt;.A.B.x; 如果你只使用 x 变量。

【讨论】:

  • "导入 *" 不是一个好习惯,即使它来自同一个文件?
  • 什么?我确实使用导入,否则我不会问这个问题
猜你喜欢
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多