本文实例讲述了Java的回调机制。分享给大家供大家参考,具体如下:
一 代码
interface CallBack // 回调接口 { void methodToCallBack( ); //回调方法 } class CallBackImpl implements CallBack // 实现回调接口和回调方法 { public void methodToCallBack( ) { System.out.println("I've been called back"); } } public class Caller { public void register(CallBack callback) // 注册回调接口 { callback.methodToCallBack( ); // 通过回调接口调用回调方法 } public static void main(String[] args) { Caller caller = new Caller( ); //B处 CallBack callBack = new CallBackImpl( ); //A处 caller.register(callBack); //C处 } }
二 运行
I've been called back
三 说明
回调机制的真正意图,就是实现控制反转,通过控制反转。对象在被创建的时候(如A处),由一个能够调控系统内所有对象的外界实体(如B处的caller),将其所依赖对象的引用传递给功能方法体(如C处的callBack,被送入到register)。
同一个接口,可以有不同的实现类,从而使得这些不同的实现类,可以定义众多不同的对象,而这些不同的对象会被按需注入功能方法块register。在被调用前,这些对象永远处于等待调用状态,直到有一天被回调。
四 代码
import java.awt.Rectangle; interface Measurer { // 这个anObject,并不明确。不明确的用意是,先不绑定任何特定的对象 double measure( Object anObject ); } // 把抽象的measure方法具体化 class AreaMeasurer implements Measurer { public double measure(Object anObject) { // 把抽象的对象明确化,由于Object对象是所有对象的鼻祖,所以,它可以化身任何对象 Rectangle aRectangle = (Rectangle) anObject; double area = aRectangle.getWidth() * aRectangle.getHeight(); return area; } } class Car { private double price; private double taxRate; Car(double price, double taxRate) { this.price = price; this.taxRate = taxRate; } public double getPrice() { return price; } public double getRate() { return taxRate; } } class CarMeasurer implements Measurer { public double measure(Object anObject) { Car aCar = (Car) anObject; double totalPrice = aCar.getPrice() * (1 + aCar.getRate()); return totalPrice; } } class Data { public static double average(Object[] objects, Measurer meas) // 前者提供数据,后者提供方法 { double sum = 0.0; for (Object obj : objects) { sum = sum + meas.measure(obj); } if (objects.length > 0) { return sum / objects.length; } else { return 0; } } } public class callBackDemo { public static void main(String[] args) { Measurer areaMeas = new AreaMeasurer(); Rectangle[] rects = new Rectangle[] { new Rectangle(5, 10, 20, 30), new Rectangle(10, 20, 30, 40), new Rectangle(20, 30, 5, 15) }; double averageArea = Data.average(rects, areaMeas); System.out.println("average area is: " + averageArea); Measurer carMeas = new CarMeasurer(); Car[] cars = new Car[] { new Car(20000, 0.12), new Car(30000, 0.16), new Car(90000, 0.18), }; double averagePrice = Data.average(cars, carMeas); System.out.println("average price is: " + averagePrice); } }
五 运行
average area is: 625.0
average price is: 54466.666666666664
六 图解
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
本文向大家介绍java 回调机制的实例详解,包括了java 回调机制的实例详解的使用技巧和注意事项,需要的朋友参考一下 java 回调机制的实例详解 序言 最近接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我
本文向大家介绍java回调机制实例详解,包括了java回调机制实例详解的使用技巧和注意事项,需要的朋友参考一下 java回调机制实例详解 以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是
本文向大家介绍Java 回调机制(CallBack) 详解及实例代码,包括了Java 回调机制(CallBack) 详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 Java 回调机制 概要: 最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之
本文向大家介绍详解Java的回调机制,包括了详解Java的回调机制的使用技巧和注意事项,需要的朋友参考一下 模块之间总是存在这一定的接口,从调用方式上看,可以分为三类:同步调用、回调和异步调用。下面着重详解回调机制。 1. 概述 Java 中的回调机制是一个比较常见的机制,只是有可能在你的程序中使用得比较少,在一些大型的框架中回调机制随处可见。本文就通过一些具体的实例,慢慢走近 Java 的回调机
本文向大家介绍Java 反射机制的实例详解,包括了Java 反射机制的实例详解的使用技巧和注意事项,需要的朋友参考一下 Java 反射机制的实例详解 前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来。那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现。 正文 Java反射机制定义 Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类
本文向大家介绍java 接口回调实例详解,包括了java 接口回调实例详解的使用技巧和注意事项,需要的朋友参考一下 java 接口回调实例详解 首先官方对接口回调的定义是这样的,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。这样听起来有点绕,我们可以这么理解接口回调:比如我们想知道隔壁老王啥时候回家?但是我们有自己的事情做不能一直监视着老王