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("一个问题");
    	}
    
    }
  • 相关阅读:
    入门菜鸟
    FZU 1202
    XMU 1246
    Codeforces 294E Shaass the Great 树形dp
    Codeforces 773D Perishable Roads 最短路 (看题解)
    Codeforces 814E An unavoidable detour for home dp
    Codeforces 567E President and Roads 最短路 + tarjan求桥
    Codeforces 567F Mausoleum dp
    Codeforces 908G New Year and Original Order 数位dp
    Codeforces 813D Two Melodies dp
  • 原文地址:https://www.cnblogs.com/liming1593/p/6579804.html
Copyright © 2011-2022 走看看