【发布时间】:2011-08-04 15:58:53
【问题描述】:
这是场景:我有一个接口 A,100 个类 B0 ... B99 只实现 A 和 50 个类 C0、C2 ... C98 扩展 B0、B2 ... B98。
B 类使用 MySQL 数据库,在表上做各种事情。 C 类为 B 类添加了额外的逻辑(验证、特权等)。 B 类是由工具生成的,而 C 类是由程序员编写的。
客户端应用程序将使用 B 类,并且无权访问 C 类。当为 B 对象调用方法时,客户端将序列化该对象并将其连同要调用的方法名称一起发送到服务器应用程序。
服务器将接收 B 对象并将其转换为 A。但是,如果存在这样的类,则服务器希望执行 C 类中覆盖的方法,否则执行 B 中的方法。正常行为只会执行 B 中的方法。
如果没有将接收到的对象转换为 C 的巨大 SWITCH 语句,服务器如何能够做到这一点?
编辑:我是 java 新手,不知道反射可以做什么。在谷歌(this 和this)的帮助下,我解决了我的问题。我可以使用动态转换来实现我想要实现的目标。谢谢大家。
【问题讨论】:
-
您是说您的客户会做
B b = new B();,但您希望您的应用程序以某种方式将b转换为C? -
确实如此。服务器将以 A obj = Receive() 的形式接收对象,并以 obj.someMethod() 的形式调用该方法。服务器如何决定调用什么方法并不重要(所有类中只有少数方法实现)。如果 C 可用,我希望调用 C 的 someMethod()。
标签: java serialization inheritance virtual client-server