zoukankan      html  css  js  c++  java
  • Java接口回调模拟按钮监听

    做Android开发的时候,经常碰到View的事件监听,虽然一直在用,但从未思考它的实现原理。还有回调函数虽然经常听说,但是总感觉很晕,一想脑袋就开始乱了。所以今天就写点东西来理一下思路。

    回调函数

    以下是维基百科上的定义:

    计算机程序设计中,回调函数,或简称回调(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进行处理
        });
  • 相关阅读:
    Count and Say
    Valid Sudoku
    Find First and Last Position of Element in Sorted Array
    Search in Rotated Sorted Array
    Longest Valid Parentheses
    web前端中文教程库
    三代基因组拼接软件--Falcon篇
    使用ThreadPoolExecutor并行执行独立的单线程任务
    python中的计时器:timeit
    Python教程
  • 原文地址:https://www.cnblogs.com/chace/p/4487118.html
Copyright © 2011-2022 走看看