2 lyc335171398 lyc335171398 于 2015.06.20 14:35 提问

java中的接口回调有什么用啊?它的价值体现在哪里?

java中接口回调作用在哪里,看半天不知道到它有什么用,求大神仔细说下。

5个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.06.20 14:41
已采纳
比如A类中有B类,B类中又要更新A类信息的时候就有用了,或者说异步的时候。
 假定我们希望在某个事件发生时得到通知。我们可以定义一个接口:
InterestingEvent.java
package org.zj.sample;
public interface InterestingEvent {
    public void interestingEvent ();
}
这使得我们可以控制实现该接口的类的任何对象。因此,我们不必关心任何外部类型信息。
发出事件信号的类必须等待实现了 InterestingEvent 接口的对象,并在适当时候调用 interestingEvent() 方法。
EventNotifier.java
package org.zj.sample;
public class EventNotifier {
    private InterestingEvent ie;
    private boolean somethingHappened;

    public EventNotifier(InterestingEvent event) {
         ie = event; // 保存事件对象以备后用。
         somethingHappened = false; // 还没有要报告的事件。
    }

    public void doWork() {
         if (somethingHappened) { // 检查设置的谓词。
           ie.interestingEvent();// 通过调用接口的这个方法发出事件信号。
         }
    }

    public void setHappened(){//设置谓词。
         somethingHappened=true;
    }
}
在上例中,使用 somethingHappened 谓词来跟踪是否应触发事件。希望接收事件通知的代码必须实现 InterestingEvent 接口,并将自身引用传递给事件通知程序。
CallMe.java
package org.zj.sample;
public class CallMe implements InterestingEvent {
    @SuppressWarnings("unused")
    private EventNotifier en;

    public CallMe() {
         // 注意 EventNotifier (InterestingEvent event),应该传递一个接口类型。
         // 而下面将this,即实现了InterestingEvent接口的CallMe实例传递给
//EventNotifier。也就是所谓的接口回调了。
         en = new EventNotifier(this); // 创建事件通知程序,并将自身引用传递给它。
    }

    // 为事件定义实际的处理程序。
    public void interestingEvent() {
              System.out.println("Call me Hello.");
    }
}
下面写个测试类。
Test.java
package org.zj.sample;
public class Test {
    public static void main(String[] args) {
         EventNotifier en=new EventNotifier(new CallMe());
         en.setHappened();
         en.doWork();
    }
}

sunhangok
sunhangok   2015.06.20 19:28

存在即合理,很多java设计模式都要使用接口回调

ProLayman
ProLayman 这句话谁都知道,放在这里没有任何意义,大家到这里来就是想搞清楚为什么要这样。
9 个月之前 回复
yl123456654321
yl123456654321   2015.06.23 11:49

android里好像是大量采用回调的...

baitianjun
baitianjun   2015.06.21 23:35

初学者先知道有这么回事,一开始也不会经常用到。以后接触设计模式什么的你会有更深的理解

miracle_yao
miracle_yao   2015.07.03 18:09
Csdn user default icon
上传中...
上传图片
插入图片