我刚刚遇到一种行为,我首先认为它是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迫使我“浪费”一个成员,如果它可以通过让我自己实现它来简单地保存它?我很清楚将这个界面放在自己的文件中的“解决方法”,但出于好奇:有没有理由说这不起作用?
答案 0 :(得分:8)
使用此代码
public class Foo implements Callback{
public static interface Callback{
public void onAction()
}
public void onAction(){//some implementation}
}
什么是Callback
?编译器(btw与Eclipse
不同,)不知道什么是Callback
。
您在使用后定义了Callback
界面。
答案 1 :(得分:6)
在第二种情况下,由于在类的主体之前检查签名,当编译器尝试编译Foo
类时,Callback
接口尚未定义。