context instanceof Activity

instanceof:是Java里面的二元運(yùn)算符,判斷左邊的對(duì)象是否是右邊類的實(shí)例。假如是的話,返回true;假如不是的話,返回false。

示例一:

String s = "I AM an Object!"; 
boolean isObject = s instanceof Object; 
  

eg:我們聲明了一個(gè)String對(duì)象引用,指向一個(gè)String對(duì)象,然后用instanceof來測試它所指向的對(duì)象是否是Object類的一個(gè)實(shí)例,顯然,這是真的,所以返回true,也就是isObject的值為true。

示例二:

instanceof有一些用處。
比如我們寫了一個(gè)處理賬單的系統(tǒng),其中有這樣三個(gè)類:

  public class Bill {//省略細(xì)節(jié)} 
  public class PhoneBill extends Bill {//省略細(xì)節(jié)} 
  public class GasBill extends Bill {//省略細(xì)節(jié)} 

在處理程序里有一個(gè)方法,接受一個(gè)Bill類型的對(duì)象,計(jì)算金額。
假設(shè)兩種賬單計(jì)算方法不同,而傳入的Bill對(duì)象可能是兩種中的任何一種,所以要用instanceof來判斷:

  public double calculate(Bill bill) { 
  if (bill instanceof PhoneBill) { 
  //計(jì)算電話賬單 
  } 
  if (bill instanceof GasBill) { 
  //計(jì)算燃?xì)赓~單 
  } 
  ... 
  } 
  

這樣就可以用一個(gè)方法處理兩種子類。
然而,這種做法通常被認(rèn)為是沒有好好利用面向?qū)ο笾械亩鄳B(tài)性。
其實(shí)上面的功能要求用方法重載完全可以實(shí)現(xiàn),這是面向?qū)ο缶幊虘?yīng)有的做法,避免回到結(jié)構(gòu)化編程模式。
只要提供兩個(gè)名字和返回值都相同,接受參數(shù)類型不同的方法就可以了:

  public double calculate(PhoneBill bill) { 
  //計(jì)算電話賬單 
  } 
  public double calculate(GasBill bill) { 
  //計(jì)算燃?xì)赓~單 
  } 

所以,使用instanceof在絕大多數(shù)情況下并不是推薦的做法,應(yīng)當(dāng)好好利用多態(tài)。

instanceof 一般情況下 用在對(duì)象類型的強(qiáng)制轉(zhuǎn)換 ,
  例如:


 //繼承關(guān)系 
  class Manager extends Employee {}

  public void doSomething(Employee e) { 
      if ( e instanceof   Manger){ 
        Manager m = (Manager) e ; 
        } 
 } 

示例三:

//判斷里面的意思是:context對(duì)象是否來自actvity。
if (context instanceof Activity) {  
    Log.i(LOGTAG, "Callback Activity...");  
    Activity callbackActivity = (Activity) context;  
    callbackActivityPackageName = callbackActivity.getPackageName();  
    callbackActivityClassName = callbackActivity.getClass().getName();  
}  

Android里面context還可能代表application和service。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,719評(píng)論 18 399
  • ECMAScript關(guān)鍵字 delete do else finally function in instance...
    doudou2閱讀 768評(píng)論 0 0
  • 文本 ??文本超出部分折疊 word-warp 邊界換行 normal 默認(rèn) break-word 內(nèi)容將在邊界內(nèi)換...
    饑人谷_風(fēng)逝閱讀 1,736評(píng)論 0 1

友情鏈接更多精彩內(nèi)容