日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 类型检查_Java开发笔记(五十二)对象的类型检查

發布時間:2024/3/24 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 类型检查_Java开发笔记(五十二)对象的类型检查 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面介紹了類的多態性,來自于雞類的實例chicken,既能用來表達公雞實例,也能用來表達母雞實例。可是這導致了一個問題,假如在call方法內部需要手工判斷輸入參數屬于公雞實例還是母雞實例,那該如何是好?所謂“雄兔腳撲朔,雌兔眼迷離,雙兔傍地走,安能辨我是雄雌”,固然編譯器在運行之時能夠自動判斷這是哪種雞,可是若讓程序員自己辨別倒的確是件傷腦筋的事情。雖說傷腦筋,卻也并非無法實現,粗略算來大致有三個辦法能派上用場,接下來分別進行闡述。

第一個辦法,區別公雞和母雞,關鍵在于識別雞的性別。注意到Chicken雞類剛好有個性別類型字段sex,在公雞類中sex固定為0,在母雞類中sex固定為1。于是通過檢查chicken實例的sex屬性取值,即可判斷該實例屬于公雞類還是屬于母雞類。據此可編寫實例類型的鑒別方法,具體代碼如下:

// 通過屬性字段type檢查某實例的歸屬類

private static void checkType(Chicken chicken) {

if (chicken.sex == 0) { // 判斷性別是否為雄性

System.out.println("檢查類型字段:這是只公雞。");

} else if (chicken.sex == 1) { // 判斷性別是否為雌性

System.out.println("檢查類型字段:這是只母雞。");

} else {

System.out.println("檢查類型字段:這既不是公雞也不是母雞。");

}

}

通過性別類型鑒定歸屬類,這種做法雖然在理論上可行,但事實上并不可靠。因為要是公雞實例的sex取值被意外篡改為1,那該公雞實例豈不是被誤判為母雞了?好比一只公雞做了變性手術,難道它就變成母雞了嗎?篡改只能改變局部特征,并不能改變該事物的內在本質,或者說,血液中流淌著的基因是無法改變的。只要DNA里面攜帶Y染色體,那么這只雞從根本上說就是公雞,而不管它外表上如何整形。

由此可見,依據基因檢測,才是檢查實例類型的可靠辦法。在Java代碼中,獲取某實例基因的手段是調用該實例的getClass方法,一旦獲得某只雞的基因,再跟公雞的基因和母雞的基因去比較,分分鐘就比較出結果了。對于公雞類Cock來說,它的基因可通過Cock.class提取;對于母雞類Hen來說,它的基因可通過Hen.class來提取。于是實例類型的鑒別過程便分解為兩個步驟:先調用實例的getClass方法得到它的基因,再將該基因與目標基因進行匹配操作,倘若匹配成功則表示二者是同一種類型。下面是按照基因匹配來檢查實例歸屬類的代碼例子:

// 通過類的基因檢查某實例的歸屬類

private static void checkClass(Chicken chicken) {

if (chicken.getClass().equals(Cock.class)) { // 判斷這只雞的DNA是不是公雞DNA

System.out.println("檢查對象的類名:這是只公雞。");

} else if (chicken.getClass().equals(Hen.class)) { // 判斷這只雞的DNA是不是母雞DNA

System.out.println("檢查對象的類名:這是只母雞。");

} else {

System.out.println("檢查對象的類名:這既不是公雞也不是母雞。");

}

}

上述的基因檢測手段很好很強大,然而其缺點也很明顯,就是太專業太啰嗦了。本來僅僅是個判斷實例類型的小事,何必要搞得興師動眾、追根溯源呢?因此Java專門提供了一個類型檢查的關鍵字instanceof,使用格式形如“A instanceof B”,意思是檢查A實例是否屬于B類型,該表達式返回true表示屬于,返回false表示不屬于。這樣關于雞類實例的類型判斷,借助于新關鍵字instanceof,又有了第三個鑒別辦法,詳細的鑒別代碼如下所示:

// 利用關鍵字instanceof檢查某實例的歸屬類

private static void checkInstance(Chicken chicken) {

if (chicken instanceof Cock) { // 判斷這只雞是不是公雞

System.out.println("檢查對象實例:這是只公雞。");

} else if (chicken instanceof Hen) { // 判斷這只雞是不是母雞

System.out.println("檢查對象實例:這是只母雞。");

} else {

System.out.println("檢查對象實例:這既不是公雞也不是母雞。");

}

}

可見利用instanceof判斷實例的類型,不但簡化了代碼的寫法,而且看起來也更易懂了。

總結

以上是生活随笔為你收集整理的java 类型检查_Java开发笔记(五十二)对象的类型检查的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。