每日一博 - 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

每日一博 - 延时任务的多种实现方式解读

每日一博 - 3D架构图 cloudcraft

每日一博 - Devops全流程

每日一博 - Devops全流程

每日一博 - DelayQueue阻塞队列源码解读