1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Java中類型判斷的幾種方式

        共 1440字,需瀏覽 3分鐘

         ·

        2020-10-11 20:03


        1. 前言

        Java這種強(qiáng)類型語(yǔ)言中類型轉(zhuǎn)換、類型判斷是經(jīng)常遇到的。今天就細(xì)數(shù)一下Java中類型判斷的方法方式。

        2. instanceof

        instanceofJava的一個(gè)運(yùn)算符,用來(lái)判斷一個(gè)對(duì)象是否為一個(gè)類的實(shí)例 。用法:

        boolean?isInstance?=?obj?instanceof?Class

        其中 obj 為一個(gè)對(duì)象實(shí)例,Class 為類名或者一個(gè)接口名,當(dāng) objClass 的實(shí)例,或是其子類實(shí)例,或是其接口的實(shí)現(xiàn)類實(shí)例,都返回 true,否則返回false。

        需要注意的是obj 必須為引用類型,不能是基本類型,下面的式子是無(wú)法編譯的:

        int?integer?=?0;
        //?編譯時(shí)會(huì)報(bào)錯(cuò)
        boolean?isInstance?=?integer?instanceof?Number

        此外編譯器會(huì)檢查instanceof表達(dá)式中的 obj 能否能轉(zhuǎn)換成右邊的Class類型,如果無(wú)法轉(zhuǎn)換則會(huì)直接報(bào)錯(cuò),如果不能確定類型,也會(huì)通過(guò)編譯。

        3. Class.isInstance

        ???//?Class.isInstance?等效于instanceof?操作符
        ??boolean?ret?=?entity?instanceof?UserInfo;
        ??boolean?isInstance?=?UserInfo.class.isInstance(entity);

        如上所示Class.isInstance 等效于instanceof 操作符。該方法是在Java 1.1中引入的,因?yàn)樗梢詣?dòng)態(tài)地使用。如果參數(shù)不為null,并且可以在不引發(fā)ClassCastException的情況下成功將其強(qiáng)制轉(zhuǎn)換為左邊的引用類型時(shí)將返回true。

        4. Class.isAssignableFrom

        該方法的調(diào)用者和參數(shù)都是Class對(duì)象,調(diào)用者為父類,參數(shù)為本身或者其子類。

        boolean?assignableFrom?=?List.class.isAssignableFrom(ArrayList.class);

        經(jīng)常用來(lái)判斷父子繼承關(guān)系,我在 Mybatis 插件教程一文中就用到了該方法來(lái)判斷某個(gè)類是不是某個(gè)接口的實(shí)現(xiàn)類。

        5. Class.isPrimitive

        此方法主要用來(lái)判斷Class是否為原始類型(booleancharbyte、shortint、longfloat、double)。

        //true
        boolean?primitive?=?int.class.isPrimitive();

        它是來(lái)解決我們?cè)诒疚恼鹿?jié) 2 中提到的基礎(chǔ)類型判斷的問(wèn)題。但是它只能判斷某類型是不是基礎(chǔ)類型,并不能具體到某個(gè)類型 。

        但是請(qǐng)注意,基礎(chǔ)類型的包裝類型用此方法判斷結(jié)果會(huì)返回 false。

        6. 總結(jié)

        這些類型判斷除了前兩種比較常見(jiàn),后面的兩種用到的機(jī)會(huì)還是有限的。不知道你用過(guò)這里面的哪幾種?歡迎留言討論。

        —?【 THE END 】—
        本公眾號(hào)全部博文已整理成一個(gè)目錄,請(qǐng)?jiān)诠娞?hào)里回復(fù)「m」獲取!


        3T技術(shù)資源大放送!包括但不限于:Java、C/C++,Linux,Python,大數(shù)據(jù),人工智能等等。在公眾號(hào)內(nèi)回復(fù)「1024」,即可免費(fèi)獲?。?!




        瀏覽 55
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            69爱爱视频 | 亚洲黄色网址 | 艹逼网站免费观看 | 天堂视频在线 | 印度精品av三级 狠狠色狠狠色综合日日92 | 影音先锋在线色女人aa鲁色资源 | 中文无码日本高潮喷水 | 99久热在线精品视频播放 | 成人A片产无码免费视频奶头麻豆 | 亚洲中文字幕视频在线观看 |