public static boolean isAssignableFrom(Class<?> interfaceClass, Class<?> implementClass) {
        if (interfaceClass.isAssignableFrom(implementClass)) {
            return true;
        }
        // 跨ClassLoader的情况
        String interfaceName = interfaceClass.getCanonicalName();
        return implementClass.getCanonicalName().equals(interfaceName)
            || isImplementOrSubclass(interfaceName, implementClass);
    }
@Test
    public void testIsAssignableFrom() throws MalformedURLException, ClassNotFoundException {
        // single class loader
        testIsAssignableFrom0();

        // over different class loader
        String codebase = ReflectUtils.getCodeBase(ClassUtilsTest.class);
        String url = "file://" + codebase;
        loader = new URLClassLoader(new URL[] { new URL(url) }, null);
        try {
            testIsAssignableFrom0();
        } finally {
            loader = null;
        }
    }