如何创建接受未知 class 类型和 return 正确对象的辅助方法
How do I create a helper method which accepts unknown class types and return the correct object
我有以下代码行供 ORMLITE 创建 dao(数据访问对象)。我试图通过为不同的数据库 tables/entities.
编写相同的语句来避免为所有实体重复自己
Dao<Entity, String> entityDao = DaoManager.createDao(connectionSource,Entity.class);
我如何创建一个方法来接受我拥有的任何实体和 return 正确的 entityDao 对象。
这样我就可以结合逻辑
Dao<UserEntity, String> userEntityDao = DaoManager.createDao(connectionSource,UserEntity.class);
和
Dao<AccountEntity, String> accountEntityDao = DaoManager.createDao(connectionSource,AccountEntity.class);
我试过以下方法:
private Dao<?, String> createDAO(Class<?> dataClass) throws SQLException{
// instantiate the dao
return DaoManager.createDao(connectionSource, dataClass);
}
但不幸的是我收到以下错误:
incompatible types: inferred type does not conform to upper bound(s)
inferred: Dao<CAP#1,?>
upper bound(s): Dao<CAP#1,?>,Dao<?,String>
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ?
您需要将通用类型参数 T
添加到您的 createDAO
方法:
private <T> Dao<T, String> createDAO(Class<T> dataClass) throws SQLException {
return DaoManager.createDao(connectionSource, dataClass);
}
如果您查看 DaoManager.createDao
的定义,您会发现它的定义方式类似,但更复杂:
public static <D extends Dao<T,?>,T> D createDao(ConnectionSource connectionSource,
Class<T> clazz) throws SQLException
我有以下代码行供 ORMLITE 创建 dao(数据访问对象)。我试图通过为不同的数据库 tables/entities.
编写相同的语句来避免为所有实体重复自己Dao<Entity, String> entityDao = DaoManager.createDao(connectionSource,Entity.class);
我如何创建一个方法来接受我拥有的任何实体和 return 正确的 entityDao 对象。
这样我就可以结合逻辑
Dao<UserEntity, String> userEntityDao = DaoManager.createDao(connectionSource,UserEntity.class);
和
Dao<AccountEntity, String> accountEntityDao = DaoManager.createDao(connectionSource,AccountEntity.class);
我试过以下方法:
private Dao<?, String> createDAO(Class<?> dataClass) throws SQLException{
// instantiate the dao
return DaoManager.createDao(connectionSource, dataClass);
}
但不幸的是我收到以下错误:
incompatible types: inferred type does not conform to upper bound(s) inferred: Dao<CAP#1,?> upper bound(s): Dao<CAP#1,?>,Dao<?,String> where CAP#1 is a fresh type-variable: CAP#1 extends Object from capture of ?
您需要将通用类型参数 T
添加到您的 createDAO
方法:
private <T> Dao<T, String> createDAO(Class<T> dataClass) throws SQLException {
return DaoManager.createDao(connectionSource, dataClass);
}
如果您查看 DaoManager.createDao
的定义,您会发现它的定义方式类似,但更复杂:
public static <D extends Dao<T,?>,T> D createDao(ConnectionSource connectionSource,
Class<T> clazz) throws SQLException