在看回调,看了一天了,还是没整明白什么时候会用到回调啊,看的云里雾里的,有哪位说点简单,通俗易懂的啊,参与就有分哪的,说到做到,谢谢各位的参与。

解决方案 »

  1.   

    谢谢你的讲解,感觉还是没透彻理解,麻烦你给看些这个网址,能结合着他讲讲吗?
    http://www.iteye.com/topic/182643
      

  2.   

    http://blog.sina.com.cn/s/blog_48cf38890100go6x.html
      

  3.   

    监听者模式。B发起一个调用给了A(执行某个方法)。当A结束的时候,B需要A通知一下来继续做剩下的事情。那么这时候就需要一个回调。这个回调是B的方法,并传递给A。
      

  4.   

    你好,这个网我看了,我的理解就是,我实现这个方法,但是我自己并不调用,留给别人调用。
    还有就是java是通过接口实现回调的,回调方法就是接口中定义的方法,理解的对吗?如果对的话,我的问题是,什么时候用啊?
      

  5.   

    我今天第一次听说Java的回调机制,学习一下!
      

  6.   

    java回调:  1.class   A,class   B  ,interface operate    
      2.class   A实现接口operate   
      3.class   B拥有一个参数为operate接口类型的函数test(operate  o)   
      4.class   A运行时调用class   B中test函数,以自身传入参数   
      5.class   B已取得A,就可以随时回调A所实现的operate接口中的方法  
      

  7.   

    回调方法是一个接口。假设监听者为A。java一般实现这种方式的时候使用了内部类,在实现这个接口是调用了B的方法。这样就形成了虽然方法是在B类中定义的,却是由A来触发的这种效果。即使回调以后需要更换或者增加新的监听也会很方便。
      

  8.   

    这个是不是直接return一个值来判断执行的结果?而且回调是B的方法吗?并且传递给A?
      

  9.   

    刚看了一个,这个感觉有点感觉了,但是还是不透彻,大家也参考一下,继续发表意见。
    http://hi.baidu.com/gglzf4/blog/item/772ea21eade9f9f8e1fe0bf4.html
      

  10.   

    java 里面没有回调这一说吧,回调是动态语言中的东西。
      

  11.   

    所谓回调,就是事先把某个方法寄存在某个地方,当某个地方满足某个条件时,就调用事先寄存的方法
    打个比方,你去饭馆吃饭钱包丢了,这时你到前台跟服务员说,如果有人捡到你的钱包交到前台的话,就让服务员通知你一声,过了一会,有人捡到钱包交到前台了,服务员就到你的位置告诉你。这个过程就是回调的过程。你事先在前台寄存了[让服务员通知你]这样的一个方法,该方法必须满足[有人捡到钱包交到了前台],在这个过程中,服务员扮演着监听的角色,当ta收到[有人捡到钱包交到了前台]这样的事件时,ta就调用你事先寄存的[让服务员通知你]这个方法。
      

  12.   

    java回调,没听过,只听过javascript里面有回调
      

  13.   

    回调,个人理解是:运用程序对某个事件感兴趣,于是给发出那个事件的事件源注册一个方法,告诉如果事件发生就调用那个方法。被调用的方法就是回调方法。在windows运用程序中,建立窗口时,注册在窗口函数中的消息处理函数,就是一个明显的回调函数。在java中,回调是通过接口或类继承来实现的。典型的像事件监听或网页解析,如:HTMLEditorKit.ParserCallback
      

  14.   

    回调接口
    你的主管给你一个任务:要求你画一个按钮(JButton的子类)出来,而点击这个按钮要发生什么事,你不用关心,因为你的主管已经把点击后要发生的事情的逻辑写好了,并封装在一个CallBack接口的execute()方法中,你只需要调用这个方法就可以了.
    那么你构造这个按钮的时候(在构造方法里),就需要获得这个CallBack接口的实现对象,从而可以在按钮的点击事件中(actionPerformed)执行这个方法.CallBack接口定义interface CallBack{
    void execute();
    }
    按钮类代码import java.awt.event.*;
    import javax.swing.JButton;class MyButton extends JButton implements ActionListener{
    //回调接口
    private CallBack callBack;
    public MyButton(CallBack callBack){
    super("点我");
    //保存回调接口
    this.callBack = callBack;
    addActionListener(this);
    }

    public void actionPerformed(ActionEvent e){
    //直接调用回调接口的方法,不用关心具体要实现什么功能
    callBack.execute();
    }
    }
    调用的代码import javax.swing.*;public class MainFrame extends JFrame { public MainFrame(){
    setBounds(0,0,500,500);
    //匿名内部类实现接口
    getContentPane().add(new MyButton(new CallBack(){
    public void execute(){
    JOptionPane.showMessageDialog(null,"hello world!");
    }
    }));
    setVisible(true);
    }

    public static void main(String[] args){
    new MainFrame();
    }}
    回调的作用在我的应用过程中还是用来解耦合,封装逻辑,使代码更灵活
      

  15.   

    使用接口   
        
      也就是使用多态来实现回调函数   
        
    public interface ICallback {
      public void   func();
    }
        
    public class ClassWithCallbackFunction implements ICallback{
      public ClassWithCallbackFunction() {
      }
      public void func(){
        System.out.println("cccccccccccccccccc");
      }
    }
        
    public class Caller {
      ICallback callback;
      public void doCallback() {
        callback.func();
      }  public void setCallback(ICallback callback) {
        this.callback = callback;
      }}
        
    public class MainClass {
      public MainClass() {
      }  public static void main(String[] args) {
        Caller caller = new Caller();
        caller.setCallback(new ClassWithCallbackFunction() {
          public void func() {
            System.out.println("aaaaaaaaaa");
          }
        });
        caller.doCallback();
      }
    }  
    现实中是把doCallback()方法放在setCallback里调用,以上是为了说明回调原理
    public class Caller {
      ICallback callback;
      public void doCallback() {
        callback.func();
      }  public void setCallback(ICallback callback) {
        this.callback = callback;
        doCallback();
      }}
      

  16.   

    好久没碰JAVA了,当初学JAVA,MVC结构的时候,那个死去活来啊~~~
      

  17.   


    我run了这些代码,在代码中:
    public class MainClass {
      public MainClass() {
      }  public static void main(String[] args) {
      Caller caller = new Caller();
      caller.setCallback(new ClassWithCallbackFunction() {
      public void func() {
      System.out.println("aaaaaaaaaa");
      }
      });
      caller.doCallback(); //not print ?
      }

    为什么caller.doCallback()没有打印任何语句,感觉要嘛打印aaaaaaaa,要嘛打印cccccc,但不打印,why?
      

  18.   

    不一定是接口,也可能是抽象类,也可能是public的public或protected方法
      

  19.   

    您好,我可不可以这样理解,接口是定义规范的,接口中的方法就是回调方法,谁实现了改接口就是被调用者,Caller扮演的角色是什么?MainClass 呢?注册函数又是哪个呢?我是针对你这个例子说的,不要嫌烦,呵呵,只是想理解透彻,这样才能灵活运用,希望多探讨,谢谢。
      

  20.   

    动态语言?java里有回调的。
      

  21.   

    Caller就是负责监听的,当满足条件时,调用回调方法callback.func();
    MainClass只是个Sample做个测试
    注册方法就是 public void setCallback(ICallback callback),该例子中监听器只能注册一个回调方法,一般情况下,监听器负责监听事件,可以在不同的事件回调不同的方法,所以,一般监听器带有一个回调方法的集合,这册方法就是把回调方法保存在该集合中,如
    class Caller {
      List<ICallback> callbackList; //回调方法集合
      public void addCallback(ICallback callback) { //注册方法
          synchronized(callbackList) {
              callbackList.add(callback);
          }
      }  public void someEvent() { //触发某事件时回调注册的方法
          syncronized(callbackList) {
              for (int i=0; i<callbackList.size(); i++) {
                  final ICallBack callback = callBackList.get(i)
                  new Thread() {
                      public void run() {
                          callback.runc();
                      }
                  }
              }
          }
      }
    }
      

  22.   

    java里不是只有这一种实现方法吗?我还以为就这一种呢,还有回调跟,类B有类A的引用,在类B的方法里用类A的引用调用类A的puclic的方法又什么区别啊?