[英]Change java class superclass with reflection
是否可以使用反射在运行时更改类对象的继承层次结构?
我的情况是:
超类
MiddleClass扩展了SuperClass
BottomClass扩展了SuperClass
我想在运行时使用反射来更改BottomClass以扩展MiddleClass。 这可能吗?
谢谢
使用Java可以获得的最接近的是检测 。 基本上你编写了一些Java类,它们给定了一系列定义类的字节,用字节代码来解决,并返回修改后的类文件字节数组。 然后,您可以将这些类打包到JAR文件中,并告诉JVM在命令行上使用它们,或者将属性放入检测JAR文件的清单文件中。
当然,如果你这样做,你会想要使用像ASM这样的字节代码操作库。
编辑 :如果您对实现接口感兴趣的类,您可能希望通过java.lang.reflect.Proxy查看动态代理类 。 这样做的缺点是你没有编写new ClassOfInterest()
代码的代码片段不受影响,但具有以下优点:
SecurityManager
问题。 不,通过反射是不可能的,因为使用反射来分析现有代码,而不是改变它。
继承是静态的,因此无法在运行时更改。
但是,您可以将SuperClass
为接口或使用委派而不是继承。
这是不可能的。例如,如果你已经有一个BottomClass的对象,并且你正在尝试更改超类,那么该对象会发生什么? 不可能...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.