public static void isAssignable(Class<?> superType, Class<?> subType, String message) {
        notNull(superType, "Type to check against must not be null");
        if (subType == null || !superType.isAssignableFrom(subType)) {
            throw new IllegalArgumentException(message + subType + " is not assignable to " + superType);
        }
    }
Assert that <code>superType.isAssignableFrom(subType)</code> is <code>true</code>.
<pre class="code">Assert.isAssignable(Number.class, myClass);</pre>

@param superType the super type to check against
@param subType   the sub type to check
@param message   a message which will be prepended to the message produced by
                 the function itself, and which may be used to provide context. It should
                 normally end in a ": " or ". " so that the function generate message looks
                 ok when prepended to it.
@throws IllegalArgumentException if the classes are not assignable
lang/src/main/java/org/apache/shiro/lang/util/Assert.java