【发布时间】:2011-12-21 01:39:24
【问题描述】:
即为什么下面的“循环依赖”是不可能的?
public class Something implements Behavior {
public interface Behavior {
// ...
}
}
由于接口不引用外部类,这应该是允许的;但是,编译器迫使我在类之外定义这些接口。这种行为有什么合乎逻辑的解释吗?
【问题讨论】:
-
听起来类加载器必须先读取类才能知道它首先需要定义类的接口......我不知道类加载的细节,但似乎很明显。
-
@donneo:由于编译器抱怨“循环依赖”,我想它已经知道内部类中定义了哪些类型。这对我来说似乎是一个任意的限制。
-
@PhilipK:你用的是什么编译器?我的(Oracle JDK 6 和 7)只抱怨他们“找不到符号”。除此之外:好问题,因为嵌套接口在任何技术上都不真正依赖外部类,这可能是合法的。
-
@JoachimSauer:我也在使用标准的 Oracle JDK 6;但是,在上面的示例中,您需要实际编写
... implements Something.Behavior- 我的 IDE 自动包含必要的导入语句。当你这样做时,编译器应该会出现循环依赖错误。
标签: java inheritance cyclic-dependency