2016-03-27 50 views
0

我有以下ORMLITE代碼行來創建一個dao(數據訪問對象)。我試圖通過爲不同的數據庫表/實體編寫相同的語句來避免爲所有實體重複自己。如何創建一個接受未知類類型並返回正確對象的幫助方法

Dao<Entity, String> entityDao = DaoManager.createDao(connectionSource,Entity.class); 

我該如何創建一個接受任何實體的方法,並返回正確的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 ? 

回答

1

你需要一個泛型類型參數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 
相關問題