10

Eclipseのバグだと最初に思った動作に遭遇しました。この単純なクラスを考えてみましょう。

public class Foo {
    public static interface Callback {
        public void onAction();
    }
}

これは完全に有効です。ただし、これはそうではありません。

public class Foo implements Callback {
    public static interface Callback {
        public void onAction();
    }

    public void onAction() { /*some implementation*/ }
}

しかし、これも有効です。

public class Foo {
    public static interface Callback {
        public void onAction();
    }

    private final Callback mCallback = new Callback() {
        public void onAction() { /*some implementation*/ }
    };
}

これ自体を実装させることで単純に保存できるのに、Javaがメンバーを「無駄にする」ように強制するのはなぜですか?私はこのインターフェースを独自のファイルに入れる「回避策」をよく知っていますが、好奇心から:これが機能しない理由はありますか?

4

2 に答える 2

8

このコードの使用

public class Foo implements Callback{

public static interface Callback{
    public void onAction()
}

public void onAction(){//some implementation}
}

は何Callbackですか?コンパイラ( 、 とは異なるbtw Eclipse)は、 が何であるかを知りませんCallback

Callbackインターフェイスは、使用後に定義しました。

于 2013-02-12T15:22:25.093 に答える
6

2番目のケースでは、クラスの本体の前に署名がチェックされるため、コンパイラーがクラスをコンパイルしようとするとFooCallbackインターフェースはまだ定義されていません。

于 2013-02-12T15:21:56.893 に答える