在Java Custom Class加载器中调用findClass时的类名规范

时间:2011-10-21 04:21:44

标签: java class

在客户类加载器中,我有一个方法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")似乎不起作用。

2 个答案:

答案 0 :(得分:2)

尝试使用完全限定名称:findClass("mypackage.MyClass")

答案 1 :(得分:0)

很可能是由于您提供的名称存在问题,请确保其具有正确的包装前缀。

给定像“java.lang.String”这样的字符串的方法将查找文件“java / lang / String.class”(在unix文件系统上)。您可能需要检查要加载的类的文件夹目录/包名称。

它的包名由点分隔,然后只是类名,例如:

 Class.forName("java.lang.String");

Class.forName("myclass");