즉, 다음의 "주기적 종속성"이 왜 불가능합니까?Java가 내부 인터페이스의 상속을 금지하는 이유는 무엇입니까?
public class Something implements Behavior {
public interface Behavior {
// ...
}
}
인터페이스는 외부 클래스를 참조하지 않으므로 허용되어야합니다. 그러나 컴파일러는 클래스 외부의 인터페이스를 정의하도록 강요하고 있습니다. 이 동작에 대한 논리적 인 설명이 있습니까?
클래스 로더와 같은 사운드는 먼저 클래스를 정의해야하는 인터페이스를 알기 위해 먼저 클래스를 읽어야 만합니다 ... 클래스 로딩에 대한 세부 사항을 알지 못하지만 매우 명확하게 보입니다. –
@donneo : 컴파일러가 "주기적 종속성"에 대해 불평하기 때문에 내부 클래스에 정의 된 유형을 이미 알고 있다고 상상해보십시오. 그것은 나에게 임의의 제한처럼 보인다. –
@PhilipK : 어떤 컴파일러를 사용하고 있습니까? Mine (Oracle JDK 6 및 7)은 "심볼을 찾을 수 없습니다"라는 불만을 제기합니다. 그 외에도 중첩 된 인터페이스는 기술적 인 방법으로 외부 클래스에 실제로 의존하지 않으므로 * 합법적 일 수 있습니다. –