I.e.次の「循環依存」はなぜできないのですか?Javaが内部インターフェイスの継承を禁止するのはなぜですか?
public class Something implements Behavior {
public interface Behavior {
// ...
}
}
インターフェイスは外部クラスを参照しないため、これは許可する必要があります。しかし、コンパイラはクラス外のインタフェースを定義するように強制しています。この動作について論理的な説明はありますか?
最初にクラスを定義する必要があるインターフェイスを知るためには、クラスローダーのようなサウンドがまずクラスを読み取る必要があります...クラスローディングの詳細はわかりませんが、かなりわかります。 –
@donneo:コンパイラは「循環依存」について不平を言っているので、内部クラスにどの型が定義されているかはすでに分かっていると思います。それはちょうど私にとっては恣意的な制限のようです。 –
@PhilipK:どのコンパイラを使用していますか? Mine(Oracle JDK 6および7)は、「シンボルを見つけることができません」と不平を言うだけです。それ以外に、ネストされたインターフェイスは実際には技術的な方法で外部クラスに依存していないので、これは合法である可能性があります。 –