public class ClassScanner
{
// scan extraClasspath for specific classes
public List<Class<?>> scanClasspathForClass(String scanCriteria)
{
...
}
public static Class<?> reloadClass(Class<?> clazz, ClassLoader clazzLoader)
{
// Question: how to reload a loaded class (ClassScanner in this example) with a different arbitrary ClassLoader?
}
// an example of how reloadClass() would be used
// in real case, this function would be in different class
public List<Class<?>> scan(URL[] extraClasspath)
{
URLClassLoader urlClazzLoader = new URLClassLoader(extraClasspath, null);
Class<?> newClass = reloadClass(ClassScanner.class, urlClazzLoader);
return ((ClassScanner) newClass.newInstance()).scanClasspathForClass();
}
}
上面的代碼演示了問題以及它爲什麼是一個問題。我需要執行reloadClass()
。我想知道Java 1.6中是否有可靠的解決方案。一個有用的參考將是Find where java class is loaded from。如何在Java中使用不同的ClassLoader重載一個加載的類?
感謝您的幫助!
看到了嗎? http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html#example – Nishant
謝謝。看見了。問題是,首先這個班可能來自任何地方。我懷疑'ClassLoader.getResource()'或'Class.getProtectionDomain()。getCodeSource()。getLocation()'是可靠的。其次,如果我可能要求簡單的解決方案而不定義我的ClassLoader? –