【发布时间】:2009-04-27 13:49:33
【问题描述】:
我有一个类应该读取消息,从信封中提取其类型,然后调用必须处理消息的方法;每个消息类型都关联一个枚举成员。
有 30 多种消息类型。
发送消息的一种方法是只使用一个开关,但它真的很丑而且容易出错(我是否已经处理过这种情况?我是否已经处理过两次?)。
另一种方法是使用单个方法 process(data) 定义接口,并为实现该接口的每个消息类型创建一个类,使用映射注册这些类,并且在应该处理消息的代码中,只需调用 map.get(messageType).process(data);但是创建 30+ 个类真的很烦人。
另一种方法是使用反射:为每个消息类型定义一个函数,具有精确的签名和模式名称,如 processMessagetype;然后创建一个从 messagetype 到 Method 的映射(在 getDekkaredMethods() 上进行简单搜索),然后执行以下操作: map.get(messageType).invoke(this,data).
你应该使用什么方法?使用java的反射有什么开销?
【问题讨论】:
标签: java reflection