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 加载程序将按预期工作。
我想调用 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 加载程序将按预期工作。