繁体   English   中英

用反射更改java类超类

[英]Change java class superclass with reflection

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

我的情况是:

超类

MiddleClass扩展了SuperClass

BottomClass扩展了SuperClass

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

谢谢

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

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

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

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

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

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

但是,您可以将SuperClass为接口或使用委派而不是继承。

这是不可能的。例如,如果你已经有一个BottomClass的对象,并且你正在尝试更改超类,那么该对象会发生什么? 不可能...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM