【发布时间】:2017-06-04 13:42:19
【问题描述】:
OrderDBManager、UserDBManager、ProductDBManager 扩展 DBManager。 我正在尝试创建一个单例 DBManager 工厂 获取不同 DBManager 类型类的实例。
但是我在使用泛型返回用户想要的确切 DBManager 类型类的实例时遇到问题。现在它只适用于 DBManager 本身。 非常感谢您的帮助!
public class DBManagerFactory {
private static final Map<String, DBManager> instances = new HashMap<>();
private static final String DB_MANAGER_PACKAGE_NAME = "ua.Test.db.";
public static DBManager getInstance(Class<? extends DBManager> dbManagerClass) {
String dbManagerClassName = dbManagerClass.getSimpleName();
DBManager dbManager = instances.get(dbManagerClassName);
if(dbManager == null){
Class clazz = Class.forName(DB_MANAGER_PACKAGE_NAME + dbManagerClassName);
dbManager = (DBManager)clazz.newInstance();
instances.put(dbManagerClassName, dbManager);
}
return dbManager;
}}
【问题讨论】:
-
Class.forName(DB_MANAGER_PACKAGE_NAME + dbManagerClassName)的意义何在?调用者已经向您提供了一个Class对象。
标签: java generics reflection singleton factory