每日一博 - instanceof vs isInstance vs isAssignableFrom
Posted 小小工匠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一博 - instanceof vs isInstance vs isAssignableFrom相关的知识,希望对你有一定的参考价值。
文章目录
Pre
- operator
instanceof
; - method
Class.isInstance(Object obj);
- method
Class.isAssignableFrom(Class<?> cls);
isInstance
/**
* Determines if the specified @code Object is assignment-compatible
* with the object represented by this @code Class. This method is
* the dynamic equivalent of the Java language @code instanceof
* operator. The method returns @code true if the specified
* @code Object argument is non-null and can be cast to the
* reference type represented by this @code Class object without
* raising a @code ClassCastException. It returns @code false
* otherwise.
*
* <p> Specifically, if this @code Class object represents a
* declared class, this method returns @code true if the specified
* @code Object argument is an instance of the represented class (or
* of any of its subclasses); it returns @code false otherwise. If
* this @code Class object represents an array class, this method
* returns @code true if the specified @code Object argument
* can be converted to an object of the array class by an identity
* conversion or by a widening reference conversion; it returns
* @code false otherwise. If this @code Class object
* represents an interface, this method returns @code true if the
* class or any superclass of the specified @code Object argument
* implements this interface; it returns @code false otherwise. If
* this @code Class object represents a primitive type, this method
* returns @code false.
*
* @param obj the object to check
* @return true if @code obj is an instance of this class
*
* @since JDK1.1
*/
public native boolean isInstance(Object obj);
isAssignableFrom
/**
* Determines if the class or interface represented by this
* @code Class object is either the same as, or is a superclass or
* superinterface of, the class or interface represented by the specified
* @code Class parameter. It returns @code true if so;
* otherwise it returns @code false. If this @code Class
* object represents a primitive type, this method returns
* @code true if the specified @code Class parameter is
* exactly this @code Class object; otherwise it returns
* @code false.
*
* <p> Specifically, this method tests whether the type represented by the
* specified @code Class parameter can be converted to the type
* represented by this @code Class object via an identity conversion
* or via a widening reference conversion. See <em>The Java Language
* Specification</em>, sections 5.1.1 and 5.1.4 , for details.
*
* @param cls the @code Class object to be checked
* @return the @code boolean value indicating whether objects of the
* type @code cls can be assigned to objects of this class
* @exception NullPointerException if the specified Class parameter is
* null.
* @since JDK1.1
*/
public native boolean isAssignableFrom(Class<?> cls);
isAssignableFrom()方法是从类继承的角度去判断,instanceof关键字是从实例继承的角度去判断。
isAssignableFrom()方法是判断是否为某个类的父类,instanceof关键字是判断是否某个类的子类。
父类.class.isAssignableFrom(子类.class)
子类实例 instanceof 父类类型
以上是关于每日一博 - instanceof vs isInstance vs isAssignableFrom的主要内容,如果未能解决你的问题,请参考以下文章
每日一博 - ThreadLocal VS InheritableThreadLocal VS TransmittableThreadLocal