我知道两种使用接口的方法。
public interface MyInterface {
void myMethod();
}
方法:使用
implements
:public class MyClass implements MyInterface { @Override myMethod(){} }
如果接口是类似的合同,我大部分时间都以这种方式使用接口:
MyInterface foo = new MyClass();
现在我可以使用提供的接口方法来控制 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()
在适当的地方调用。
第一种方法可以通过使用 the this pointer
too 来实现回调。现在我想知道回调应该使用哪种方法,为什么?我都见过,但我不知道真正的好处在哪里。
在我看来,这是我可以在第一种方法和第二种方法之间进行选择的唯一区别。如果我在这里错了,请告诉我另一个区别。我要求它能够为不同的情况选择合适的工具。
另外我想知道另一种情况,但回调,我可以使用第二种方法。