java 判斷對象是否是某個類的類型兩種方法


第一種:

instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。 

用法:

result = object instanceof class
參數:
result:必選項。任意變量。返回true或false
object:必選項。任意對象表達式。
class:必選項。任意已定義的對象類。
說明:
如果 object 是 class 的一個實例,則 instanceof 運算符返回 true。如果 object 不是指定類的一個實例,或者 object 是 null,則返回 false。
 例如:
 Boolean b;  
String str = "foo";  
b = ( str instanceof String );   // true
b = ( str instanceof Object );   // also true
b = ( str instanceof Date );     // false, not a Date or subclass

注意:
1)null值不是任何對象的實例,所以下面這個例子返回了false,無論這個變量聲明的是什么類型。
String s = null; 
if ( s instanceof String ) 
    // false, won't happen
2)instanceof也可以正確的報告一個對象是否是數組和特定的接口類型。

if ( foo instanceof byte[] )

 

第二種:

一般可能我們在使用java的RTTI技術時,都使用instanceof來判斷一個對象是不是屬於某個類,但是有時候這個類是繼承於一個父類的,所以,不能嚴格判斷出是不是自己的類,而不是自己的父類。這個時候就使用另一種思路也是不錯的——getClass判斷;當然肯定還有其他的方法來判斷的,只是自己的總結。如果有好的其他方法請賜教。。
public class test {
    public static void main(String arg[]) {
        ClassA a = new ClassA();
        ClassB b = new ClassB();
        ClassC c = new ClassC();
        sayClass(a);
        sayClass(b);
        sayClass(c);
        System.out.println("---------------------------------");
        equalClass(a);
        equalClass(b);
        equalClass(c);
    }
    public static void sayClass(Object o){
        if(o instanceof ClassA){
            System.out.println("ClassA");
        }else if(o instanceof ClassB){
            System.out.println("ClassB");
        }
    }
    
    public static void equalClass(Object o){
        if(o.getClass().equals(ClassA.class)){
            System.out.println(o.getClass().getName());
        }else if(o.getClass().equals(ClassB.class)){
            System.out.println(o.getClass().getName());
        }else if(o.getClass().equals(ClassC.class)){
            System.out.println(o.getClass().getName());
        }
    }
}
class ClassA{
    ClassA(){};
}
class ClassB{
    ClassB(){};
}

class ClassC extends ClassA{
    ClassC(){};
}

 

 
 


免責聲明!

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



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