Java的接口回调
2017-04-07 00:00
281 查看
先上代码:https://git.oschina.net/sfeng95/IntefaceC.git
CDNS下载地址:http://download.csdn.net/detail/sfeng95/9726259
都是免积分的!
场景引入:
我们在编程的时候经常会遇到一些这样的问题,比如说讯飞的语音识别,我们调用它的识别方法之后不是马上就可以得到识别的结果,需要经过一段时间(网络传输耗时),但是我们不会让程序傻逼地等待它的返回结果,而是让classA实现它定义的接口IntefaceC,当讯飞的服务器返回结果了就掉用接口IntefaceC所定义的方法告诉classA,我已经识别完成。下面我们用很简单的Java代码来模拟一下这些场景。
假设1+1=2的计算量非常大,电脑需要十秒钟才能得出结果=2,在这种场景我们的java编程就需要使用接口回调函数。下面我们来一起敲代码,只需要三步。
第一步:创建一个接口,接口定义了一个onfinsh的方法,该方法的参数int jiefajieguo就是用来传输结果的。
[java] view plain copy
第二步:创建一个ClassA,它有一个有参数的构造方法,参数是接口IntefaceC,它有一个做加法的方法:doSomeThing(int a, int b),这个方法用Thread.sleep(10000);来模拟耗时计算,当它把计算完成后就调用接口IntefaceC的onfinsh(c);方法,其中的c就是计算结果,用它来传递计算结果给调用ClassA的doSomeThing的其他类。
第三步:定义一个类ClassB ,它实现接口 IntefaceC,同时它需要实现接口定义的onfinsh方法,onfinsh(int jiefajieguo) 其中参数jiefajieguo就是ClassA的返回接口。怎么调用ClassA的doSomeThing方法?
首先你要创建一个ClassA对象,它需要一个IntefaceC作为参数,由于ClassB实现了这个接口,所有this就是表示IntefaceC类型的参数。ClassA classA = new ClassA(this);
然后你就可以这样子了classA.doSomeThing(1,2);注意,为什么我没有在main函数中使用它,因为main函数是static的,static方法中不能使用this关键字,使用我只能定义一个方法来调用它。
上文是我自己的所学所想,有不对的地方轻指出来以免误导大众。我第一次写博客,希望对你们喜欢我的分享。
CDNS下载地址:http://download.csdn.net/detail/sfeng95/9726259
都是免积分的!
场景引入:
我们在编程的时候经常会遇到一些这样的问题,比如说讯飞的语音识别,我们调用它的识别方法之后不是马上就可以得到识别的结果,需要经过一段时间(网络传输耗时),但是我们不会让程序傻逼地等待它的返回结果,而是让classA实现它定义的接口IntefaceC,当讯飞的服务器返回结果了就掉用接口IntefaceC所定义的方法告诉classA,我已经识别完成。下面我们用很简单的Java代码来模拟一下这些场景。
假设1+1=2的计算量非常大,电脑需要十秒钟才能得出结果=2,在这种场景我们的java编程就需要使用接口回调函数。下面我们来一起敲代码,只需要三步。
第一步:创建一个接口,接口定义了一个onfinsh的方法,该方法的参数int jiefajieguo就是用来传输结果的。
[java] view plain copy
public interface IntefaceC { void onfinsh(int jiefajieguo); }
第二步:创建一个ClassA,它有一个有参数的构造方法,参数是接口IntefaceC,它有一个做加法的方法:doSomeThing(int a, int b),这个方法用Thread.sleep(10000);来模拟耗时计算,当它把计算完成后就调用接口IntefaceC的onfinsh(c);方法,其中的c就是计算结果,用它来传递计算结果给调用ClassA的doSomeThing的其他类。
public class ClassA { IntefaceC intefaceC; ClassA(IntefaceC c) { intefaceC = c; } public void doSomeThing(int a, int b) { // 模式一些很耗时的操作 System.out.println("计算"+a+"+"+b+"大约需要10秒钟时间,请等待"); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } int c=a+b; intefaceC.onfinsh(c); } }
第三步:定义一个类ClassB ,它实现接口 IntefaceC,同时它需要实现接口定义的onfinsh方法,onfinsh(int jiefajieguo) 其中参数jiefajieguo就是ClassA的返回接口。怎么调用ClassA的doSomeThing方法?
首先你要创建一个ClassA对象,它需要一个IntefaceC作为参数,由于ClassB实现了这个接口,所有this就是表示IntefaceC类型的参数。ClassA classA = new ClassA(this);
然后你就可以这样子了classA.doSomeThing(1,2);注意,为什么我没有在main函数中使用它,因为main函数是static的,static方法中不能使用this关键字,使用我只能定义一个方法来调用它。
public class ClassB implements IntefaceC { public void jiafa(int x,int y) { ClassA classA = new ClassA(this); classA.doSomeThing(x,y); } @Override public void onfinsh(int jiefajieguo) { System.out.println("结束:" + jiefajieguo); } public static void main(String[] args) { ClassB b=new ClassB(); b.jiafa(3,4); } }
上文是我自己的所学所想,有不对的地方轻指出来以免误导大众。我第一次写博客,希望对你们喜欢我的分享。
相关文章推荐
- Java接口回调技术
- Java中什么是接口回调?and Java回调函数的理解
- java接口用法:向上转型和接口回调
- java中接口回调与java回调机制
- JAVA接口回调详解
- Java 接口回调机制
- Java中接口对象实现回调
- java接口回调的解析
- Java接口回调模拟按钮监听
- 回调函数、Java接口回调 总结
- JAVA与Android接口回调浅析;
- java之模块学习-接口回调机制详解
- Java接口回调一般用法
- java 接口回调机制
- 6.3 Java中接口回调的初步理解
- Java接口回调
- Android java回调机制与自定义接口回调方法
- Java回调机制以及使用HibernateCallBack()接口的好处
- java 接口回调,向上转型