zoukankan      html  css  js  c++  java
  • Java回调机制

    回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,比较经典的回调方式:

    • class A实现接口CallBack callback,重写其中的某个方法D—— 背景1
    • class A中包含一个class B的引用b —— 背景2
    • class B有一个参数为callback的方法f(CallBack callback) —— 背景3
    • A的对象a调用B的方法 f(CallBack callback) —— A类调用B类的某个方法 C
    • 然后b就可以在f(CallBack callback)方法中调用A的方法 —— B类调用A类重写的接口中的方法D

    下面通过例子来实异步回调机制。

    首先建立一个接口

    public interface Callback {
    	
    	public void solve(String msg);
    }  
    

    class A实现接口CallBack

    public class A implements Callback {
    	
    	private B b;//引用B的对象
    	
    	public A (B b) {
    		this.b = b;
    	}
    
    	//通过这个方法问B问题
    	public void ask(String question) {
    		//这里用一个线程来表示异步
    		new Thread(new Runnable() {
            	@Override
            	public void run() {
    				//A调用B中的方法,在这里注册回调接口 
    				b.answerQuestion(A.this, question);
            	}
    		}).start(); 
    	}
    
    	//这里A可以做一些其他的事情
    
    	//B知道答案后调用此方法告诉A,就是A的回调方法 
    	@Override
    	public void solve(String s) {
        	System.out.println("答案是:" + s);
    	}
    	
    }  
    

    建立class B

    public class B {
    
    	public void answerQuestion(call_back cb, String s){
        	System.out.println("A 的请求是:" + s);
        
        	try {
            	Thread.sleep(1000);
            	//做一些事情
        	} catch (InterruptedException ex) {
            	ex.printStackTrace();
        	}
        
        	String result = "这个";
        	//调用A中的方法,即B类反过来调用A的方法D
        	cb.solve(result);
    	}
    }  
    

    新建一个测试类

    public class Test {
    
    	public static void main(String[] args) {
        
        	B b = new B();
        	A a = new A(b);
        	
        	a.ask("一个问题");
    	}
    
    }
  • 相关阅读:
    swift3.0更新内容
    Core Animation
    UIBezierPath精讲
    iOS-Core-Animation-Advanced-Techniques(原文来自cocoachina)
    iOS上图形和动画处理
    使用GCD(转自唐巧的技术博客)
    UITableView的cell的分割线位置
    swift深入理解闭包
    Swift控制器加载xib Swift Controller'view load from xib
    -[UIWindow viewForFirstBaselineLayout]: unrecognized selector sent to instance
  • 原文地址:https://www.cnblogs.com/liming1593/p/6579804.html
Copyright © 2011-2022 走看看