这是我的情景。我有一个插件系统。插件可以通过插件的主列表在运行时相互检测和查找。 层次结构是这样的
Base Class A
----Unknown Class B extends A
--------Known method from Class A, we'll call it E
--------Dynamically generated Class F extends B
------------Overridden Method E
------------Other methods inherited from A and B
F应该从B继承行为,但E被覆盖的例外。然后将F与B分开实例化为具有相似但不相同行为的不同对象。 B类在编译时是未知的,但它可以通过迭代来识别,并在插件的主列表中检查A的实例。
我的具体案例涉及游戏。不一定是我在做什么,但一个很好的例子就是找到其他插件添加的每把剑,然后制作一把剑的新副本,具有相同的能力,除了它射击火而不是任何奇特的挥杆效果最初有,并且方法E确定当剑摆动时会发生什么。
答案 0 :(得分:2)
您可以使用像javassist这样的字节码工程工具包。它允许你 create new classes based on your existing class并允许您change the method body。