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可以通过让我自己实现它来简单地保存它,为什么Java会强迫我为它“浪费”一个成员?我很清楚将这个接口放在自己的文件中的“解决方法”,但出于好奇:这有什么原因不起作用?

4

2 回答 2

8

使用此代码

public class Foo implements Callback{

public static interface Callback{
    public void onAction()
}

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

什么是Callback?编译器(顺便说一句,与Eclipse, 不同)不知道什么是Callback.

Callback您在使用后定义了接口。

于 2013-02-12T15:22:25.093 回答
6

在第二种情况下,由于在类的主体之前检查签名,因此当编译器尝试编译Foo类时,Callback尚未定义接口。

于 2013-02-12T15:21:56.893 回答