用反射改变java类的父类



是否有可能在运行时用反射改变类对象的继承层次?

我的情况是:

超类

MiddleClass扩展了SuperClass

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

谢谢

使用Java最接近于此的方法是插装。基本上,您编写一些Java类,这些类获得定义类的一系列字节,处理字节代码,并返回修改后的类文件字节数组。然后将这些类打包到一个JAR文件中,并告诉JVM使用它们,可以在命令行中使用,也可以将一个属性放入检测JAR文件的清单文件中。

当然,如果你这样做,你会想使用一些字节码操作库,如ASM。

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

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

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

继承是静态的,因此不能在运行时更改。

但是你可以让SuperClass成为一个接口或者使用委托代替继承。

不可能。例如,如果你已经有一个对象的底部类和你试图改变超类,会发生什么对象?这是不可能的…

相关内容

  • 没有找到相关文章

最新更新