gpt4 book ai didi

java - 当类是字节数组形式时确定类的父类(super class)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:47 25 4
gpt4 key购买 nike

我有一个字节数组,表示类文件的字节。

我正在尝试获取由字节数组表示的类的父类(super class)。目前,我正在使用 ClassLoader 类的“defineClass”方法的反射来创建由字节数组表示的类的类定义。然后,我通过在新创建的 Class 对象上调用 getSuperclass() 来获取父类(super class)。

基于字节数组表示的类的父类(super class),我需要进行字节码转换。然后最终目标是在转换后重新定义由字节数组表示的类。

问题是我无法将转换后的类重新定义为它的原始名称,因为不能在同一个 JVM 实例中定义两个以上的同名类。

我真的需要能够基于字节数组表示的类的父类(super class)进行转换,并且真的需要用它的原始名称重新定义转换后的类。

当类是字节数组形式时,有没有办法获取类的父类(super class)?基于 .class 文件的格式,我假设我可以以某种方式“hackily”确定父类(super class),而无需将类定义为类对象并将其加载到 JVM 中,但我不太确定我将从哪里开始这样做。

有什么建议吗?

最佳答案

简单,但在运行时效率不高:在新的类加载器中定义类,确定父类(super class)型,进行转换,然后在您选择的类加载器中定义类。 (不同类加载器加载的类在运行时被认为是不同的)。

更高效:使用一些能够检查类文件的库,例如 Javassist ( Tutorial ),或者自己编写提取代码(检查 class file specification )。

关于java - 当类是字节数组形式时确定类的父类(super class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com