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接口回调机制是Java语言中一種重要的编程机制,它允许在不同的类之间进行交互和数据传递。下面我们将通过实例和代码来了解Java接口回调机制的实现原理和应用场景。 一、什么是回调...
Java接口回调是编程中一种常见的设计模式,它允许一个对象在特定事件发生时通知其他对象。接口回调的主要目的是实现解耦,使得调用者和被调用者之间不必知道具体的实现细节,仅通过约定好的接口进行通信。在Java中,...
Java接口回调一般用法: 1. 实现接口实际上和继承抽象类类似,只不过继承是在类的层面上操作,接口是在方法和常量集合的层面上操作,接口比抽象类更抽象、更简洁。可以把实现接口看成继承特定的一个或多个方法以及...
在Java支持方法指针之前,Java接口不能提供一种实现回调的好方法。如果您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧。 熟悉MS-Windows和X Window System事件驱动编程模型的开发人员,习惯...
在Java编程中,接口回调是一种常见的设计模式,用于实现对象之间的通信和事件处理。当我们谈论“接口回调”时,我们通常是指一个类实现了接口,并在特定条件下调用接口中的方法来通知其他对象某个操作已完成或者发生...
Java中的接口回调实例 Java 中的接口回调实例是一种常见的编程设计模式,它允许开发者在不改变原有代码结构的情况下,轻松地实现新的功能扩展。今天,我们将深入探讨 Java 中的接口回调实例,了解它的定义、实现和...
在这个Java版的实现中,我们将探讨如何利用URL接口回调来处理支付流程。 首先,我们需要理解URL接口回调的基本概念。在微信支付中,当用户完成支付后,微信服务器会主动向商家设定的回调URL发送一个POST请求,携带...
在Android开发中,接口回调是一种常见的通信机制,用于在组件之间传递信息,特别是在异步操作中,如网络请求、文件读写等。接口回调能够帮助我们处理这些操作的结果,使得程序更加灵活和响应式。本篇文章将深入讲解...
在Android开发中,接口回调是一种常见的通信机制,用于在不同组件之间传递信息,尤其是在异步操作完成后更新UI或执行其他后续操作时。本篇将详细阐述Android接口回调的基本概念、实现方式以及其在实际开发中的应用。...
近在看androidFragment与Activity进行数据传递的部分,看到了接口回调的内容,来总结一下。 二、回调的含义和用途 1、什么是回调? 一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为...
在Android开发中,接口回调是一种常见的编程模式,用于在组件之间进行通信,特别是当需要一个组件(如Activity或Fragment)响应另一个组件的行为时。本文将深入探讨接口回调的概念,以及如何在Android环境中有效地...
在Java编程中,回调函数是一种设计模式,它允许一个对象在另一个对象...在给定的示例中,`Button.java`和`OnButtonClickListener.java`展示了如何通过接口来实现回调,而`CallMeTest.java`则可能是测试回调功能的代码。
在编程领域,接口回调是一种常见的设计模式,它允许一个对象在另一个对象完成特定操作后接收通知或执行相应的处理。在本示例中,“接口回调实现简易购物车功能”着重展示了如何利用接口回调来构建一个简单的购物车...
本篇文章将详细探讨“接口回调传值”的概念及其在实际应用中的实现方式,以"InterfaceCallBackDemo1"为例进行讲解。 首先,理解接口回调传值的基本原理。在Android中,当需要在两个不直接相关的组件(如Activity和...
"接口回调之Fragment之间通信"这一主题着重讲解了如何通过接口回调的方式解决Fragment之间的数据传递和事件交互问题。 首先,理解Fragment的基本概念和生命周期是必要的。Fragment有自己的创建、显示、隐藏、销毁等...
在编程领域,接口回调是一种常见的设计模式,尤其在Java、C#等面向对象的语言中广泛使用。接口回调允许一个对象调用另一个对象的方法,而这个方法的定义在调用者中,而不是被调用者。这种模式使得代码更加灵活,能够...
比如说讯飞的语音识别,我们调用它的识别方法之后不是马上就可以得到识别的结果,需要经过一段时间(网络传输耗时),但是我们不会让程序傻逼地等待它的返回结果,而是让classA实现它定义的接口IntefaceC,当讯飞的...