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