我是新來的Java所以道歉,如果我有完全的棍子的錯誤結束。的Java和泛型
我試圖寫一個通用的(在這個詞的英語語感!)數據訪問類。 比如我現在有:
public class DA<T> {
public static Dao getAccountDao() throws NamingException, SQLException {
Context ctx = new InitialContext();
DataSource dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/test");
ConnectionSource connectionSource = new DataSourceConnectionSource(dataSource, new MysqlDatabaseType());
Dao<Account, Integer> accountDao = DaoManager.createDao(connectionSource, Account.class);
return accountDao;
}
}
我可以調用此方法:
Dao<Account, Integer> accountDao = DA.getAccountDao();
但我需要一個版本,這對於每道/模型。所以我試圖做一些可以這樣稱呼的東西:
Dao<SomeClass, Integer> someClassDao = DA.getDao(SomeClass);
這是可能的嗎?
我已經試過了諸如:
public class DA {
public static Dao getDao(<T>) throws NamingException, SQLException {
Context ctx = new InitialContext();
DataSource dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/test");
ConnectionSource connectionSource = new DataSourceConnectionSource(dataSource, new MysqlDatabaseType());
Dao<T, Integer> accountDao = DaoManager.createDao(connectionSource, T.class);
return accountDao;
}
}
但Netbeans中給出了錯誤:illegal start of type
我的大腦與泛型掙扎,就是這個東西,他們可以做的?
編輯:從崗位幫助下我已經有了:
public class DA<T> {
public static Dao<T, Integer> getDao(T daoType) throws NamingException, SQLException {
Dao<T, Integer> accountDao = DaoManager.createDao(T.class);
return accountDao;
}
}
產生兩個錯誤: non-static type variable T cannot be referenced from a static context
,如果我刪除了static
關鍵字,我得到: cannot select from a type variable
我需要如何泛型和靜態工作讀了起來,但第二個看起來像擦除的結果(http://www.coderanch.com/t/386358/java/java/Converting-type-parameters-class ),所以不知道它是否會發生可能。早期
應該提到,該道的東西是由一種叫做ORMLite的ORM庫,所以createDao等是不是我的代碼。
我需要實現你的一個相似的目的和打算原路和你一樣。但是你使用的圖書館ORMLite,提出了一個不同的方式來解決這個問題。此評論不回答您的問題,但可能會幫助您以更好的方式實現您的整體目標。看到這個[所以問題的更多細節](http://stackoverflow.com/questions/8273675/how-to-extend-the-basedaoimpl-class-of-ormlite-on-android-to-extend-functionalit)。希望能幫助到你。 – 2013-12-09 00:55:32