java接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。
看概念总是难以理解,下面以实例说明:
定义一个函数来获取文件的字节数组,此时我们想要在Test类获得读取文件后的二进制数组bytes,我们一般做法是定义把bytes定义到外部,使用get方法获取。代码如下
package com.longpo.callback; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class Content { private byte[] bytes; public byte[] getBytes() { return bytes; } public void GetFileContent() { //往往耗时的操作都启动子线程 new Thread(new Runnable() { @Override public void run() { File file = new File("F:\\file.txt"); FileInputStream is; try { is = new FileInputStream(file); // 根据文件大小来创建字节数组 bytes = new byte[(int) file.length()]; int len = is.read(bytes);// 返回读取字节的长度 is.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
此时在Test调用 getBytes即可获取到。如
public static void main(String[] args) { Content content=new Content(); content.GetFileContent(); byte[]bytes = null; //等待子线程执行完,不然会报空指针 while(bytes==null){ bytes=content.getBytes(); } System.out.println("文件内容是: "+new String(bytes)); }
运行结果:
就上面的获取二进制数组bytes,还可以使用java的接口回调来解决,把代码改为:
package com.longpo.callback; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class Content { public void GetFileContent(final CallBack callBack) { // 往往耗时的操作都启动子线程 new Thread(new Runnable() { @Override public void run() { File file = new File("F:\\file.txt"); FileInputStream is; try { is = new FileInputStream(file); // 根据文件大小来创建字节数组 byte[] bytes = new byte[(int) file.length()]; int len = is.read(bytes);// 返回读取字节的长度 is.close(); callBack.getBytes(bytes); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } // 回调接口定义 public interface CallBack { public void getBytes(byte[] bytes); } }
对应的Test类的代码也需要修改,此时需要使用到接口式匿名内部类,代码改为:
public static void main(String[] args) { Content content=new Content(); //接口式匿名内部类 content.GetFileContent(new CallBack() { //参数bytes就代表二进制数组的数据 public void getBytes(byte[] bytes) { System.out.println("文件内容是: "+new String(bytes)); } }); }
运行结果:
相关推荐
Java接口回调一般用法:实现接口实际上和继承抽象类类似,只不过继承是在类的层面上操作,接口是在方法和常量集合的层面上操作,接口比抽象类更抽象、更简洁。可以把实现接口看成继承特定的一个或多个方法以及一些...
主要介绍了java 接口回调实例详解的相关资料,所谓回调就是使用java中的多态,需要的朋友可以参考下
主要介绍了Java接口回调机制,下面我们来一起学习一下吧
微信支付-商户支付模式一url接口回调-java版,代码清晰,可直接运行
接口回调、反射
近在看androidFragment与Activity进行数据传递的部分,看到了接口回调的内容,来总结一下。 二、回调的含义和用途 1、什么是回调? 一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为...
java 回调函数 自己模拟实现 使用了接口来完成
比如说讯飞的语音识别,我们调用它的识别方法之后不是马上就可以得到识别的结果,需要经过一段时间(网络传输耗时),但是我们不会让程序傻逼地等待它的返回结果,而是让classA实现它定义的接口IntefaceC,当讯飞的...
接口回调是多态的另一种体现。接口回调是指:可以把使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量可以调用被类实现的接口中的方法。当接口变量调用被类实现的接口中的方法时,是...
java实现--企业微信回调配置案例及工具代码
本文的主要内容是同过实际代码向大家展示Java编程中接口回调的一般用法,具有一定参考价值,需要的朋友可以了解下
android接口回调 handler+thread
在Java支持方法指针之前,Java接口不能提供一种实现回调的好方法。如果您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧。 熟悉MS-Windows和X Window System事件驱动编程模型的开发人员,习惯...
一个实现回调方式的示例,简单来说回调方法的函数参数是接口,是方法
今天小编就为大家分享一篇关于Java中的接口回调实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Java最简单的接口回调,更详细的同步回调和异步回调见相关博客。
Java简单的回调demo,写了个java最简单的回调demo,便于学习!最复杂的东西都是由简单来的,欢迎下载!
C回调java方法的几种用法