gpt4 book ai didi

Java继承问题: going beyond the vtable

转载 作者:行者123 更新时间:2023-11-30 06:35:43 26 4
gpt4 key购买 nike

场景如下:我有一个接口(interface) A、100 个仅实现 A 的类 B0 ... B99 和扩展 B0、B2 ... B98 的 50 个类 C0、C2 ... C98。

B 类与 MySQL 数据库一起工作,在表上做各种事情。C 类向 B 类添加额外的逻辑(验证、特权等)。B 类由工具生成,而 C 类由编码人员编写。

客户端应用程序将使用 B 类并且无法访问 C 类。当为 B 对象调用方法时,客户端将序列化该对象并将其连同要调用的方法名称一起发送到服务器应用程序。

服务器将接收 B 对象并将其转换为 A。但是,如果 C 类存在,服务器将执行在 C 类中被重写的方法,否则执行 B 中的方法。正常行为只会执行来自 B 的方法。

如果没有将接收到的对象转换为 C 的巨大 SWITCH 语句,服务器如何能够做到这一点?

编辑:我是 java 的新手,不知道反射能做什么。在谷歌( thisthis )的帮助下,我解决了我的问题。我可以使用动态转换来实现我想要实现的目标。感谢大家。

最佳答案

假设每个 C 类都有一个构造函数或一个静态的 createFromSuper 来从它的父 B(或 A)创建它......

您可以创建一个 FactoryClass,其中注册了所有可用的 C。您可以使用反射来获取要“替换”的 C 的父级,记住 Map/Hashtable 中的每个 B.class->C.class 映射。

然后当你收到一个 B 时,你将它传递给 Factory,如果它找到一个映射,它将返回相同的 B 对象,或者调用返回 C 的构造函数/createFromSuper。

关于Java继承问题: going beyond the vtable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com