ClassLoader:假装没有找到 class 以便子加载器可以处理它

ClassLoader: pretend that a class wasn't found so a child loader can handle it instead

我想调用 URLClassLoader which, when loadClass() 的子class,可以用反射检查加载的 class 并有条件地决定假装找不到 class,以便让子 class 加载程序代替处理加载。像下面这样的东西行得通吗?

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
    Class<?> c = super.findClass(name);

    if (letChildHandleLoad(c))
        throw new ClassNotFoundException();

    return c;
}

loadClass 的默认行为是调用 getParent().loadClass,然后调用 findClass。要获得您所描述的行为,通常您不会修改父 class 加载程序;相反,通常您会修改子 class 加载器,方法是覆盖 loadClass 方法以首先调用 findClass。这样,loadClass 调用源自子 class 加载器将从其本地 class 路径加载 class,然后加载父级,但 loadClass 调用源自使用父 class 加载程序将按预期工作。