高階JAVA碼農必須搞清楚它們的區別:instanceof、isInstance、isAssignableFrom

茅坤寶駿氹發表於2018-05-03

轉載自 高階JAVA碼農必須搞清楚它們的區別:instanceof、isInstance、isAssignableFrom

instanceof、isInstance、isAssignableFrom這幾個有沒有接觸過,或者接觸過部分?


定義


a instanceof B 


a是B的例項,B是類或者介面、父類或父介面,即B c = a成立。


B.class.isInstance(a)


這個叫動態等價,效果和上面等價,一般用於檢查泛型,如jdk中CheckedMap裡面用到這個檢查Map裡面的key、value型別是否和約定的一樣。



A.class.isAssignableFrom(B)


兩個class的型別關係判斷,判斷B是不是A的子類或子介面


演示


先看看下面的例子就會明白它們各自的用途和含義。


User:使用者基類

PrivateUser:私人使用者子類,繼承User類


PrivateUser priUser = new PrivateUser();


System.out.println(priUser instanceof User);// true

System.out.println(User.class.isInstance(priUser));// true


System.out.println(User.class.isAssignableFrom(PrivateUser.class));// true

System.out.println(PrivateUser.class.isAssignableFrom(User.class));// false


相關文章