本文主要是介绍【理解Class<?>xx】 1.这个要理解为一个new出来的类对象 2.何时用enum枚举单例 3.消息派发模块的编写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MsgHandler.java // 消息处理基类,但是本身又有一些方法
属性:
Map<Class<?>, MsgHandler> instances = new ConcurrentHashMap<>();使用的地方
// 注意参数: Map中的key肯定是一个对象啊,因此这里肯定是一个实例化的对象。
public static <T extends MsgHandler> T getInstance(Class<?> clazz){try{Object inst = instances.get(clazz);if(inst == null){Constructor<?> constr = clazz.getDeclaredConstructor();constr.setAccessible(true);inst = constr.newInstance();}return (T) inst;}catch(Exception e){throw new SysException(e);}
}
LoginService.java // 结合单例模式,创建一个消息派发服务
// 这是一个单例模式
public enum LoginService {INSTANCE;// 这里搞出来一个对象private AccountMsgInstance m_msgInstance = MsgHandler.getInstance(AccountMsgInstance.class);public void dispatchMessage(ClientSession session, ProtobufMessage message){m_msgInstance.handle(message, "serv", this, "connId", session.getConnId(), "session", session);}}
这篇关于【理解Class<?>xx】 1.这个要理解为一个new出来的类对象 2.何时用enum枚举单例 3.消息派发模块的编写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!