是否可以使用反射在运行时更改类对象的继承层次结构?
我的情况是:
父类
MiddleClass扩展了SuperClass
BottomClass扩展了SuperClass
我想在运行时使用反射来更改BottomClass以扩展MiddleClass。这可能吗?
感谢
答案 0 :(得分:5)
使用Java最接近这一点的是instrumentation。基本上你编写了一些Java类,它们给定了一系列定义类的字节,用字节代码来解决,并返回修改后的类文件字节数组。然后,您可以将这些类打包到JAR文件中,并告诉JVM在命令行上使用它们,或者将属性放入检测JAR文件的清单文件中。
当然,如果你这样做,你会想要使用像ASM这样的字节代码操作库。
编辑:如果您感兴趣的课程实现了界面,您可能需要通过dynamic proxy classes查看java.lang.reflect.Proxy。这样做的缺点是你没有编写new ClassOfInterest()
的代码片段不受影响,但具有以下优点:
SecurityManager
问题。答案 1 :(得分:4)
不,通过反射是不可能的,因为使用反射来分析现有代码,而不是改变它。
答案 2 :(得分:0)
继承是静态的,因此无法在运行时更改。
但是,您可以使SuperClass
成为接口或使用委托而不是继承。
答案 3 :(得分:-1)
这是不可能的。例如,如果你已经有一个BottomClass的对象而你正在尝试更改超类,那么该对象会发生什么?这是不可能的......