问题设置由三个 java 库组成(为了便于阅读,我删除了所有包名,到处都使用全限定名):
external-lib:提供抽象类
public abstract class AbstractExternal {}
my-lib-A:提供类
public class ClassA extends AbstractExternal { public static final String FOO = "foo"; }
external-lib
在 my-lib-A 的类路径中。my-lib-B 从 ClassA 静态导入 FOO:
import static ClassA.FOO; public class ClassB { private String foo = FOO; }
my-lib-A
在 my-lib-B 的类路径external-lib
中,但不在。
问题:该import static
行产生以下错误:
The type AbstractExternal cannot be resolved. It is indirectly referenced from required .class files
.
但是(1),当将 ClassB 修改为
import ClassA;
public class ClassB {
private String foo = ClassA.FOO;
}
编译器很高兴。
但是(2),当添加第二个抽象时,两个 my-lib-A 之类的
public class AbstractClassA extends AbstractExternal {}
和
public class ClassA extends AbstractClassA {
public static final String FOO = "foo";
}
上面示例中 ClassA.FOO 的静态导入有效。
问题1:为什么在使用作品时会import static ClassA.FOO
失败?import ClassA
ClassA.FOO
问题 2:为什么import static ClassA.FOO
当它从 my-lib-A 扩展另一个类然后扩展 AbstractExternal 时会起作用?
编辑:重要信息:有问题的编译器是Eclipse Compiler for Java (ECJ)。
编辑 2:javac 与 ECJ 同步,并且能够在静态导入失败时编译 ClassB 中的正常导入和类访问。