я использовал два экземпляра пользовательского загрузчика классов для загрузки класса, но их хеш-код не равен.
public class MyClassLoader extends ClassLoader{
private String mLibPath;
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
MyClassLoader classLoader1 = new MyClassLoader("/Users/kk/Downloads");
MyClassLoader classLoader2 = new MyClassLoader("/Users/kk/Downloads");
Class<?> c1 = classLoader1.loadClass("loader.DemoObj");
Class<?> c2 = classLoader2.loadClass("loader.DemoObj");
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
}
public MyClassLoader(String path){
mLibPath = path;
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
String fileName = getFileName(name);
File file = new File(mLibPath,fileName);
try {
FileInputStream is = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len=0;
try{
while((len = is.read()) != -1){
bos.write(len);
}
}catch (IOException e){
e.printStackTrace();
}
byte[] data = bos.toByteArray();
is.close();
bos.close();
return defineClass(name, data, 0, data.length);
} catch (IOException e) {
e.printStackTrace();
}
return super.findClass(name);
}
private String getFileName(String name){
name = name.replace(".","/");
return name+".class";
}
}
classLoader1 и classLoader2 оба вызывают loadClass ("loader.DemoObj") , они должны вызывать findLoadedClass () проверить, есть ли в кеше класс загрузчика. DemoObj.Код выше должен возвращать два одинаковых числа ,, но мой код возвращает другое.
1846274136
1639705018