我如何以及如何动态创建未知 class 的子 class?
How and can I dynamically create a subclass of an unknown class?
这是我的场景。我有一个插件系统。这些插件可以通过插件主列表在 运行 时间相互检测和查找。
层次是这样的
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 分开实例化为具有相似但不相同行为的不同对象。 class B 在编译时是未知的,但可以通过迭代来识别它,并检查插件主列表中的 A 实例。
我的具体案例涉及一个游戏。不一定是我在做什么,但一个很好的例子是找到其他插件添加的每把剑,然后制作一把具有所有相同能力的剑的新副本,除了它会射击而不是它可能产生的任何花哨的挥杆效果本来就有,方法E决定挥剑时会发生什么。
您可以使用像 javassist 这样的字节码工程工具包。它可以让你
create new classes based on your existing class and lets you change the method body.
这是我的场景。我有一个插件系统。这些插件可以通过插件主列表在 运行 时间相互检测和查找。 层次是这样的
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 分开实例化为具有相似但不相同行为的不同对象。 class B 在编译时是未知的,但可以通过迭代来识别它,并检查插件主列表中的 A 实例。
我的具体案例涉及一个游戏。不一定是我在做什么,但一个很好的例子是找到其他插件添加的每把剑,然后制作一把具有所有相同能力的剑的新副本,除了它会射击而不是它可能产生的任何花哨的挥杆效果本来就有,方法E决定挥剑时会发生什么。
您可以使用像 javassist 这样的字节码工程工具包。它可以让你 create new classes based on your existing class and lets you change the method body.