最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的回調機制實例詳解

 更新時間:2019年08月08日 09:58:42   作者:cakincqm  
這篇文章主要介紹了Java的回調機制,結合實例形式詳細分析了java回調機制相關原理、用法及操作注意事項,需要的朋友可以參考下

本文實例講述了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

三 說明

回調機制的真正意圖,就是實現控制反轉,通過控制反轉。對象在被創(chuàng)建的時候(如A處),由一個能夠調控系統內所有對象的外界實體(如B處的caller),將其所依賴對象的引用傳遞給功能方法體(如C處的callBack,被送入到register)。

同一個接口,可以有不同的實現類,從而使得這些不同的實現類,可以定義眾多不同的對象,而這些不同的對象會被按需注入功能方法塊register。在被調用前,這些對象永遠處于等待調用狀態(tài),直到有一天被回調。

四 代碼

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節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

相關文章

  • springboot bean循環(huán)依賴實現以及源碼分析

    springboot bean循環(huán)依賴實現以及源碼分析

    最近在使用Springboot做項目的時候,遇到了一個循環(huán)依賴的 問題,所以下面這篇文章主要給大家介紹了關于springboot bean循環(huán)依賴實現以及源碼分析的相關資料,需要的朋友可以參考下
    2021-06-06
  • Java中JSONObject和Map<String,?Object>的轉換方法

    Java中JSONObject和Map<String,?Object>的轉換方法

    平時對接口時,經常遇到json字符串和map對象之間的交互,這篇文章主要給大家介紹了關于Java中JSONObject和Map<String,?Object>的轉換方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • MyBatis編寫一個簡單的SQL生成工具

    MyBatis編寫一個簡單的SQL生成工具

    MyBatis 是一個強大的數據持久化框架,它提供了一種半自動化的 ORM 實現方式,本文將為大家介紹如何使用MyBatis編寫一個簡單的SQL生成工具,需要的可以了解下
    2025-03-03
  • Java實現獲取行政區(qū)劃的示例代碼

    Java實現獲取行政區(qū)劃的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Java語言實現獲取行政區(qū)劃的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習游戲
    2023-03-03
  • 詳解Java中的不可變對象

    詳解Java中的不可變對象

    這篇文章主要介紹了Java中的不可變對象的相關知識,文中代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以參考下
    2020-06-06
  • Java instanceof關鍵字的的進一步理解

    Java instanceof關鍵字的的進一步理解

    這篇文章主要介紹了Java instanceof關鍵字的的進一步理解,本文用一些實例講解了instanceof操作符的一些知識,需要的朋友可以參考下
    2015-03-03
  • Java的函數式接口@FunctionalInterface的使用說明

    Java的函數式接口@FunctionalInterface的使用說明

    這篇文章主要介紹了Java的函數式接口@FunctionalInterface的使用說明,我們常用的一些接口Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface注解,需要的朋友可以參考下
    2024-01-01
  • java中File類的三種創(chuàng)建文件夾方法總結

    java中File類的三種創(chuàng)建文件夾方法總結

    這篇文章主要給大家介紹了關于java中File類的三種創(chuàng)建文件夾方法,File類代表文件或目錄路徑名的抽象表達形式,通過File類提供的方法,我們可以很方便地創(chuàng)建文件夾,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • SpringBoot+MyBatis-Plus+Velocity實現代碼自動生成

    SpringBoot+MyBatis-Plus+Velocity實現代碼自動生成

    本文主要介紹了使用SpringBoot、MyBatis-Plus和Velocity模板引擎實現代碼自動生成器,該生成器能夠根據數據庫表結構自動生成增刪改查操作的代碼,感興趣的可以了解一下
    2025-03-03
  • Java實現添加,讀取和刪除Excel圖片的方法詳解

    Java實現添加,讀取和刪除Excel圖片的方法詳解

    本文介紹在Java程序中如何添加圖片到excel表格,以及如何讀取、刪除excel表格中已有的圖片。文中的示例代碼講解詳細,感興趣的可以學習一下
    2022-05-05

最新評論

休宁县| 汝城县| 汉源县| 珠海市| 通化县| 明水县| 团风县| 唐河县| 达州市| 茂名市| 额尔古纳市| 武乡县| 大冶市| 尤溪县| 武鸣县| 乐至县| 社旗县| 姜堰市| 盐源县| 福泉市| 珠海市| 镶黄旗| 邵阳市| 临汾市| 吉隆县| 双桥区| 蓬溪县| 安图县| 临城县| 信阳市| 洛扎县| 洛川县| 南充市| 山阳县| 科技| 孟津县| 邵武市| 屏东市| 昌都县| 克东县| 筠连县|