用反射更改java类超类

mik*_*ike 5 java reflection

是否可以使用反射在运行时更改类对象的继承层次结构?

我的情况是:

超类

MiddleClass扩展了SuperClass

BottomClass扩展了SuperClass

我想在运行时使用反射来更改BottomClass以扩展MiddleClass.这可能吗?

谢谢

Mat*_*ine 5

使用Java可以获得的最接近的是检测.基本上你编写了一些Java类,它们给定了一系列定义类的字节,用字节代码来解决,并返回修改后的类文件字节数组.然后,您可以将这些类打包到JAR文件中,并告诉JVM在命令行上使用它们,或者将属性放入检测JAR文件的清单文件中.

当然,如果你这样做,你会想要使用像ASM这样的字节代码操作库.

编辑:如果您对实现接口感兴趣的类,您可能希望通过java.lang.reflect.Proxy查看动态代理类.这样做的缺点是你没有写的代码片段不受影响,但具有以下优点:new ClassOfInterest()

  1. 比修改类的字节代码容易得多.
  2. 您可以动态选择使代理的不同实例表现得像具有不同的超级类别.
  3. 您不必担心任何SecurityManager问题.


Mal*_*olm 3

不,通过反射是不可能的,因为反射用于分析现有代码,而不是更改它。