Detailed Explanation of Java Object Type Judgment
- 2021-07-22 09:52:52
- OfStack
instanceof
Determines whether an object is an instance of a class or an instance of a subclass of a class. Its way of judging is probably like this:
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()
In this way, the type of comparison, 1 must return true only by itself, and the subclass or parent class returns false;
// B Yes A A subclass of, C Yes B Subclass of
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) is equivalent to b. getClass () = = A. class
Class.isInstance()
This method is completely equivalent to instanceof.
// B Yes A A subclass of, C Yes B Subclass of
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
Determines whether a class is another class and its subclasses.
// B Yes A A subclass of, C Yes B Subclass of
// 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));