疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java接口回调模拟按钮监听


 

 
回调函数
 
以下是维基百科上的定义:
 
在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
 
光看定义可能晦涩难懂,下面还是回到标题,用Java接口回调实现按钮监听。
 
Java接口回调
 
我这里的代码基本就仿照Android的按钮监听方式。
 
首先定义一个接口,里面定义回调函数onClick。
 
public interface OnClickListener {
    void onClick(Button b);
}
然后我们来实现Button类。
 
复制代码
public class Button {
    private OnClickListener listener;
    
    public void setOnClickListener(OnClickListener listener){
        this.listener=listener;
    }
    
    public void printSomeThing(String msg){
        System.out.println(msg);
    }
 
    public void click() {
        listener.onClick(this);
    }
 
}
复制代码
最后在main函数中调用。
 
复制代码
public class CallBackTest {
    
    public static void main(String[] args) {
        Button button=new Button();
        button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(Button b) {
                b.printSomeThing("按钮被点击");
            }
        });
        
        System.out.println("开始模拟点击");
        System.out.println("真正的点击应该由系统来调用");
        button.click();
    }
 
}
复制代码
大概过程就是button.click()调用回调函数OnClickListener.onClick,但是这个onClick的实现是在button.setOnClickListener里面的匿名内部类实现的。语言还是表达不太清楚,所以还是多看代码吧。
 
JS中的回调函数
 
 顺便提一下JS中的回调函数吧。因为JS的函数也是对象,可以直接作为参数传递,所以实现起来很简单。
 
复制代码
    //模拟服务器返回数据
    var getInfo=function(id,callback){
        var result="<div>Something get By"+id+"</div>";
        setTimeout(function(){
           callback(result);
        },1000);//定时1秒返回数据
    };
    //调用
    getInfo(id,function(result){
        //对返回的result进行处理
    });
复制代码