嘗試使用該類型的類:
public <T> List<T> getAll(Class<T> type) {
return em.createQuery("SELECT t from " + type.getSimpleName() + " t").getResultList();
}
注意,這仍然會產生警告,因爲getResultList()
返回一個原始列表。
編輯:
如果你只有一個完全合格的類名,即你需要調用Class.forName()
,有沒有辦法知道在編譯時的類 - 既然泛型(幾乎)是一個編譯時功能只(提示:類型擦除),他們不會在這種情況下幫助。
你仍然可以調用泛型方法與Class.forName()
檢索像這樣一類:
List<?> l = getAll(Class.forName(typeName));
你也可能不需要獲取類對象本身,如果它只是一個查詢(但是,可能有意義,首先檢查該字符串是否是現有類的名稱)。在這種情況下,你的方法可能是這樣的:
public List<?> getAll(String type) {
return em.createQuery("SELECT t from " + type + " t").getResultList();
}
這種變體也將讓您無論是傳遞一個完全合格的類名或實體的名稱,即它會在一定程度上更加靈活。
另外,你可以返回List<Object>
,這將允許你添加更多的對象到列表中(但要小心,你可以添加任何東西)。
這就是說,我會盡可能使用第一個選項,第二個選項作爲回退時,具體類型(或至少某些接口)在編譯時未知。
爲什麼你沒有使用沒有泛型的簡單列表? – Masudul
由於類型刪除,我不認爲這是可能的。 – Christian
你需要像列表一樣的東西,把你從數據庫中獲取的數據或類似的東西 –