使用反射更改java类超类
是否可以在运行时使用反射更改类对象的继承层次结构
我的情况是:
超类
中产阶级扩展了超阶级
BottomClass扩展了超类
我想在运行时使用反射来更改BottomClass以扩展MiddleClass。这可能吗
谢谢
你可以在下面搜索框中键入要查询的问题!
是否可以在运行时使用反射更改类对象的继承层次结构
我的情况是:
超类
中产阶级扩展了超阶级
BottomClass扩展了超类
我想在运行时使用反射来更改BottomClass以扩展MiddleClass。这可能吗
谢谢
# 1 楼答案
继承是静态的,因此不能在运行时更改
但是,您可以将
SuperClass
作为接口,或者使用委托而不是继承# 2 楼答案
使用Java最接近这个目标的是instrumentation。基本上,您编写一些Java类,这些类被赋予定义类的一系列字节,然后处理字节码,返回修改过的类文件字节数组。然后将这些类打包到一个JAR文件中,并告诉JVM使用它们,可以在命令行上使用,也可以通过将一个属性放入检测JAR文件的清单文件中
当然,如果你这样做,你会想使用一些字节码操作库,比如ASM
编辑:如果你感兴趣的类实现了接口,你可能想通过java.lang.reflect.Proxy查看一下dynamic proxy classes。这样做的缺点是,您没有编写的代码片段不受影响,但有以下优点:
# 3 楼答案
这是不可能的。例如,如果您已经有一个BottomClass对象,并且您正试图更改super class,那么该对象会发生什么情况?不可能
# 4 楼答案
不,通过反射是不可能的,因为反射是用来分析现有代码的,而不是用来修改它