在客户类加载器中,我有一个方法findClass,如下所示:
public Class findClass(String className){
byte classByte[];
Class result=null;
result = (Class)classes.get(className);
if(result != null){
return result;
}
try{
return findSystemClass(className);
}catch(Exception e){
}
try{
String classPath =
((String)ClassLoader.getSystemResource(className.replace('.',File.separatorChar)+".class").getFile()).substring(1);
classByte = loadClassData(classPath);
result = defineClass(className,classByte,0,classByte.length,null);
classes.put(className,result);
return result;
}catch(Exception e){
return null;
}
}
如果类在默认包中,我如何指定我要查找的类的名称。例如,如果类名为myclass.class
,如何将此名称传递给此方法。将其称为findClass("myclass")
或findClass("myclass.class")
似乎不起作用。
答案 0 :(得分:2)
尝试使用完全限定名称:findClass("mypackage.MyClass")
答案 1 :(得分:0)
很可能是由于您提供的名称存在问题,请确保其具有正确的包装前缀。
给定像“java.lang.String”这样的字符串的方法将查找文件“java / lang / String.class”(在unix文件系统上)。您可能需要检查要加载的类的文件夹目录/包名称。
它的包名由点分隔,然后只是类名,例如:
Class.forName("java.lang.String");
或
Class.forName("myclass");