Java對象類型的判斷


instanceof

判斷某個對象是否是某個類的實例或者某個類的子類的實例。它的判斷方式大概是這樣的:

    public<T> boolean function(Object obj, Class<T> calzz) {
        if (obj == null) {
            return false;
        }
        try {
            T t = (T) obj;
            return true;
        } catch (ClassCastException e) {
            return false;
        }
    }

Class.equals()

這種方式比較的類型,一定是本身才返回true,子類或者父類都返回false;

        // B是A的子類,C是B的子類
        B b = new B();
        // false
        System.out.println(b.getClass().equals(A.class));
        // true
        System.out.println(b.getClass().equals(B.class));
        // false
        System.out.println(b.getClass().equals(C.class));

PS:b.getClass().equals(A.class)等同於b.getClass() == A.class

Class.isInstance()

這個方法跟instanceof完全等價。

        // B是A的子類,C是B的子類
        B b = new B();
        // true
        System.out.println(A.class.isInstance(b));
        // true
        System.out.println(B.class.isInstance(b));
        // false
        System.out.println(C.class.isInstance(b));

Class.isAssignableFrom

判斷某個類是否是另一個類和其子類。

        // B是A的子類,C是B的子類
        // false
        System.out.println(B.class.isAssignableFrom(A.class));
        // true 
        System.out.println(B.class.isAssignableFrom(B.class));
        // true
        System.out.println(B.class.isAssignableFrom(C.class));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM