【发布时间】:2013-11-14 15:25:25
【问题描述】:
我知道使用接口的两种方法。
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()。
第一种方法也可以使用this pointer 来实现回调。现在我想知道回调应该使用哪种方法,为什么?两者我都见过,但我不知道真正的好处在哪里。
在我看来,这是我可以在第一种方法和第二种方法之间进行选择的唯一区别。如果我在这里错了,请告诉我另一个区别。我要求它能够为不同的情况选择合适的工具。
另外我想知道另一种情况,除了回调,我可以使用第二种方法。
【问题讨论】:
-
它们是两个不同的东西。第一种方法使用继承,而第二种方法使用组合。选择哪一个取决于在您的接口和类的上下文中哪个更有意义。
-
@shyam 这正是我迷失的地方,找不到正确的上下文。
标签: java interface callback anonymous-class