Android中Java instanceof關(guān)鍵字全面解析
instanceof關(guān)鍵字用于判斷一個(gè)引用類型變量所指向的對(duì)象是否是一個(gè)類(或接口、抽象類、父類)的實(shí)例。
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來測(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來判斷:
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)。
相關(guān)文章
Android?App隱私合規(guī)檢測(cè)輔助工具Camille詳解
Camille是一款A(yù)ndroid?App隱私合規(guī)檢測(cè)輔助工具,現(xiàn)如今APP隱私合規(guī)十分重要,各監(jiān)管部門不斷開展APP專項(xiàng)治理工作及核查通報(bào),不合規(guī)的APP通知整改或直接下架,下面小編給大家介紹下Android?App隱私合規(guī)檢測(cè)輔助工具Camille,感興趣的朋友一起看看吧2022-02-02
Android獲取WiFi網(wǎng)絡(luò)列表的流程步驟
在Android開發(fā)中,我們經(jīng)常需要獲取設(shè)備附近可用的Wi-Fi網(wǎng)絡(luò)列表,這對(duì)于開發(fā)需要基于Wi-Fi網(wǎng)絡(luò)進(jìn)行功能或者與其他設(shè)備進(jìn)行通信的應(yīng)用程序非常重要,本文將介紹如何在Android應(yīng)用程序中獲取Wi-Fi網(wǎng)絡(luò)列表,需要的朋友可以參考下2024-11-11
Android實(shí)現(xiàn)App中導(dǎo)航Tab欄懸浮的功能
Android編程實(shí)現(xiàn)對(duì)話框形式進(jìn)度條功能示例
Android WebView基礎(chǔ)應(yīng)用詳解
Android?Studio實(shí)現(xiàn)購買售賣系統(tǒng)
Android輸入法與表情面板切換時(shí)的界面抖動(dòng)問題解決方法

