我知道使用接口的两种方法。
public interface MyInterface {
void myMethod();
}
方法:使用implements
:
public class MyClass implements MyInterface {
@Override
myMethod(){}
}
如果接口是如下的合同,我大部分时间都在使用这种接口:
MyInterface foo = new MyClass();
现在我可以使用提供的Interface方法控制MyClass。
这对收藏也很好。如果有一些类实现MyInterface
我有一个共同的线程:
List<MyInterface> list = new ArrayList<MyInterface>();
方法:将其用作anonymous class
:
public class MyClass {
public MyInterface myInterface = new MyInterface(){
@Override
public void myMethod(){}
};
}
我正在使用这种方法进行具有依赖注入的回调,如下所示:
public class MyOtherClass {
public MyInterface myInterface;
// Using setter injection here
public void setInterface(MyInterface interface){
myInterface = interface;
}
}
MyOtherClass正在调用适当的myInterface.myMethod()
。
使用this pointer
也可以通过第一种方法实现回调。现在我想知道哪种方法应该用于回调以及为什么?我已经看到了两者,我不知道真正的好处在哪里。
我认为,这是我可以在第一种和第二种方法之间做出选择的唯一区别。如果我错了,请告诉我另一个不同之处。我要求它能够为不同的情况选择合适的工具。
另外我想知道另一种情况,但是回调,我可以使用第二种方法。
答案 0 :(得分:1)
使用命名或匿名接口实现的选择取决于以下几点:
最后,这两种方法之间的最大区别主要是非技术性的:它与您生成的代码的可读性有关。毕竟,匿名类只不过是“语法糖” - 你可以用只有命名的类来完美地实现你的系统。如果您认为命名实现更好,请使用第一种方法;如果您认为匿名的一个更好用,请使用第二种方法。