【发布时间】:2020-03-06 06:34:33
【问题描述】:
我正在使用来自另一个接口的某些static 变量,因此我在我的类中导入了这个接口。但是,在我的 Java 类的 .class 文件中没有看到这个 import。但是,可以看到其他非static 成员的导入。这是预期的行为吗?如果是,那为什么?
【问题讨论】:
-
你能发布你的类的例子吗,你的静态变量也是最终的吗?
我正在使用来自另一个接口的某些static 变量,因此我在我的类中导入了这个接口。但是,在我的 Java 类的 .class 文件中没有看到这个 import。但是,可以看到其他非static 成员的导入。这是预期的行为吗?如果是,那为什么?
【问题讨论】:
导入永远不会在 .class 文件中编码,它们是纯粹的语法糖,以避免在 Java 源代码中为类和/或成员使用全名。类文件不知道您是使用 import package.AClass 还是仅在源文件中通过其全名引用 package.AClass。
您可能会看到,在您的课程中根本找不到对您导入字段的引用,这可能是由于以下两个原因之一:
您导入了类/成员,但从未在其余代码中实际引用它。
由于导入是语法糖,这意味着您的“真实代码”中不存在对导入事物的引用
您引用了一个包含compile time constant 的静态最终字段,在这种情况下,不会生成对该字段的引用,但会直接内联值。
class A {
public static final String CONSTANT = "foo";
}
class B {
private String field = A.CONSTANT;
}
在这种情况下,B 的类文件将包含值 "foo" 和 no 对类 A 的引用。
【讨论】: