为什么我的类不能实现在其中声明的接口?

Raf*_*l T 9 java implementation interface inner-classes

我刚刚遇到一种行为,我首先认为它是Eclipse中的一个错误.考虑这个简单的类:

public class Foo {
    public static interface Callback {
        public void onAction();
    }
}
Run Code Online (Sandbox Code Playgroud)

这完全有效.但是,这不是:

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

    public void onAction() { /*some implementation*/ }
}
Run Code Online (Sandbox Code Playgroud)

但这也是有效的:

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

    private final Callback mCallback = new Callback() {
        public void onAction() { /*some implementation*/ }
    };
}
Run Code Online (Sandbox Code Playgroud)

为什么Java迫使我"浪费"一个成员,如果它可以通过让我自己实现它来简单地保存它?我非常清楚将此接口放在自己的文件中的"解决方法",但出于好奇:有没有理由说这不起作用?

ban*_*nuj 8

使用此代码

public class Foo implements Callback{

public static interface Callback{
    public void onAction()
}

public void onAction(){//some implementation}
}
Run Code Online (Sandbox Code Playgroud)

是什么Callback?编译器(btw不同于Eclipse)不知道是什么Callback.

Callback在使用后定义了界面.


sp0*_*00m 6

在你的第二情况下,由于签名类的机构,当编译器试图编译前检查Foo类的Callback接口还没有定义.