我想创建一个URLClassLoader
的子类,当调用loadClass()
时,可以用反射检查加载的类,并有条件地决定假装它找不到该类,以便允许用于子类加载器来处理加载。会有类似以下的工作吗?
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
Class<?> c = super.findClass(name);
if (letChildHandleLoad(c))
throw new ClassNotFoundException();
return c;
}
答案 0 :(得分:0)
loadClass
的默认行为是调用getParent().loadClass
,然后调用findClass
。要获得您要描述的行为,通常不会修改父类加载器;相反,通常您可以通过覆盖loadClass
方法来首先调用findClass
来修改子类加载器。这样,源于子类加载器的loadClass
调用将在父类之前从其本地类路径加载类,但是从父类加载器发起的loadClass
调用将按预期工作。