Java中的instanceof關(guān)鍵字在Android中的用法實(shí)例詳解
在下面介紹Android中如何使用instanceof關(guān)鍵字開發(fā)更方便時(shí),先來(lái)溫習(xí)一下java中instanceof的概念。
instanceof大部分的概念是這樣定義的:instanceof是Java的一個(gè)二元操作符,和==,>,<是同一類東西。由于它是由字母組成的,所以也是Java的保留關(guān)鍵字。它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回boolean類型的數(shù)據(jù)。舉個(gè)栗子:
String s = "I AM an Object!"; boolean isObject = s instanceof Object;
我們聲明了一個(gè)String對(duì)象引用,指向一個(gè)String對(duì)象,然后用instancof來(lái)測(cè)試它所指向的對(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來(lái)判斷:
public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//計(jì)算電話賬單
}
if (bill instanceof GasBill) {
//計(jì)算燃?xì)赓~單
}
...
}
這樣就可以用一個(gè)方法處理兩種子類。
然而,這種做法通常被認(rèn)為是沒(méi)有好好利用面向?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)。
以上是我抄的,覺(jué)得寫的還不錯(cuò),簡(jiǎn)介明了,就拿過(guò)來(lái)引用一下??梢钥闯?instanceof關(guān)鍵是就是用來(lái)判斷左邊的對(duì)象是否是右邊類的實(shí)例,如果是,就能處理下一步的邏輯。
在Android中,instanceof關(guān)鍵字常用來(lái)用在Fragment中調(diào)用Activity方法。比如說(shuō),你需要在Fragment中調(diào)用當(dāng)前Activity中的某個(gè)方法,有的人說(shuō),那我直接重新寫一個(gè)不就是么?那要是有特殊的方法,fragment不支持呢?這時(shí)候就用到了instanceof,舉個(gè)栗子:
if( getActivity() instanceof IndexActivity) ((IndexActivity) getActivity()).showccaidan();
上面兩行代碼中可以看出,如果當(dāng)前這個(gè)Fragment 是IndexActivity的碎片時(shí),那么久調(diào)用activity中的方法,調(diào)用之前必須強(qiáng)轉(zhuǎn)一下當(dāng)前Activity。
其實(shí)不僅Fragment中能夠用到instanceof關(guān)鍵字,自定義的Adapter中也是可以用到的:
if(context instanceof CommodityWarningActivity){
holder.entName_ll.setVisibility(View.VISIBLE);
holder.entName.setText(list.get(arg0).getStrCorporationName());
}else{
holder.entName_ll.setVisibility(View.GONE);
}
context這個(gè)做android都應(yīng)該知道,context從字面意思是上下文,或者叫做場(chǎng)景,也就是用戶與操作系統(tǒng)操作的一個(gè)過(guò)程。(不是特么了解context可以先去看看資料)。所以說(shuō)如果有context地方需要的話都可以使用instanceof關(guān)鍵字。
以上所述是小編給大家介紹的Java中的instanceof關(guān)鍵字在Android中的用法實(shí)例詳解,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
springboot openfeign從JSON文件讀取數(shù)據(jù)問(wèn)題
今天主要說(shuō)一下在openfeign里讀取JSON文件的問(wèn)題,我們將測(cè)試所需要的數(shù)據(jù)存儲(chǔ)到文件里,在修改時(shí)關(guān)注點(diǎn)比較單純2018-06-06
SpringBoot常見(jiàn)問(wèn)題小結(jié)
這篇文章主要介紹了SpringBoot常見(jiàn)問(wèn)題小結(jié),需要的朋友可以參考下2017-07-07
Java Comparable 和 Comparator 的詳解及區(qū)別
這篇文章主要介紹了Java Comparable 和 Comparator 的詳解及區(qū)別的相關(guān)資料,Comparable 自然排序和Comparator 定制排序的實(shí)例,需要的朋友可以參考下2016-12-12
SpringBoot實(shí)現(xiàn)異步任務(wù)的項(xiàng)目實(shí)踐
本文將使用SpringBoot 去實(shí)現(xiàn)異步之間的調(diào)用,提高系統(tǒng)的并發(fā)性能、用戶體驗(yàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
java8使用流的filter來(lái)篩選數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了java8使用流的filter來(lái)篩選數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
MyBatis使用自定義TypeHandler轉(zhuǎn)換類型的實(shí)現(xiàn)方法
這篇文章主要介紹了MyBatis使用自定義TypeHandler轉(zhuǎn)換類型的實(shí)現(xiàn)方法,本文介紹使用TypeHandler 實(shí)現(xiàn)日期類型的轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
SpringBoot使用JavaMailSender實(shí)現(xiàn)發(fā)送郵件+Excel附件
項(xiàng)目審批完畢后,需要發(fā)送郵件通知相關(guān)人員,并且要附帶數(shù)據(jù)庫(kù)表生成的Excel表格,這就要求不光是郵件發(fā)送功能,還要臨時(shí)生成Excel表格做為附件,本文詳細(xì)介紹了SpringBoot如何使用JavaMailSender實(shí)現(xiàn)發(fā)送郵件+Excel附件,需要的朋友可以參考下2023-10-10
Android內(nèi)存泄漏實(shí)戰(zhàn)解析
Java是垃圾回收語(yǔ)言的一種。這篇文章主要介紹了Android內(nèi)存泄漏 的相關(guān)資料,需要的朋友可以參考下2016-10-10

