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
名称组件的方案,这需要访问源代码。)因此,让您的类加载器理解完全限定名称将很困难。但这没关系,因为普通的类装入器不会
最后,请注意,我说的是“按惯例”。理论上,您可以实现自己喜欢的任何类文件命名方案,只要您能够找出如何始终如一地进行映射。似乎默认类加载器无论如何都需要一种识别类的方法。是否有一种方法可以利用已经存在的查找机制?资源总是有一个
/
分隔的路径名。(见附件)