Java 从类路径读取字节码

Java 从类路径读取字节码,java,classloader,Java,Classloader,我已经定义了自己的类加载器,它需要从类路径读取字节码,增强它,并定义类。我最初的实现有这样一行代码: getResourceAsStream(name.replaceAll("\\.", File.separator)+".class"); 但我似乎已经长大了。我遇到了一些边界条件,比如嵌套的子类,这一行无法正确处理 正确/可接受的解决方案是什么 谢谢 如果name是类的二进制名称,则资源文件名通常为: separator + name.replaceAll("\\.", separa

我已经定义了自己的类加载器,它需要从类路径读取字节码,增强它,并定义类。我最初的实现有这样一行代码:

getResourceAsStream(name.replaceAll("\\.", File.separator)+".class");
但我似乎已经长大了。我遇到了一些边界条件,比如嵌套的子类,这一行无法正确处理

正确/可接受的解决方案是什么


谢谢

如果
name
是类的二进制名称,则资源文件名通常为:

    separator + name.replaceAll("\\.", separator) + ".class"
类的值是字节码文件中使用的值,由返回

请注意,资源名称分隔符不一定与
File.separator
相同。例如,如果类加载器是从JAR文件加载的,那么分隔符是由JAR文件API定义的,而不是由文件系统约定定义的

如果您对嵌套/匿名类使用二进制名称,那么这一切都应该有效。但是,完全限定类名到二进制类名的映射是特定于编译器的,不容易自动复制。(您需要重新生成编译器用于分配
$n
名称组件的方案,这需要访问源代码。)因此,让您的类加载器理解完全限定名称将很困难。但这没关系,因为普通的类装入器不会


最后,请注意,我说的是“按惯例”。理论上,您可以实现自己喜欢的任何类文件命名方案,只要您能够找出如何始终如一地进行映射。

似乎默认类加载器无论如何都需要一种识别类的方法。是否有一种方法可以利用已经存在的查找机制?资源总是有一个
/
分隔的路径名。(见附件)