這是星期五晚上,所以我可能會有點慢,但我無法解決我認爲這是一個簡單的問題。Java泛型和反射|如何實例化一個泛型類
我基本上有這種情況。
1)基礎類MyDAO
public abstract class MyDAO<K, E> implements DAO<K, E>
{
....
}
2)一束在一個給定包MyDAO具體類實現的,說:
public class TaxonomyDAO extends MyDAO<Integer,Taxonomy>{
....
}
每個類延伸MyDAO基本上添加特定DAO設有relevanto到他們的E元素。我正在編寫一個通用工廠,其目標是使用反射來提供WhateverClassDAO的實例,如果此類存在,並且返回基本MyDAO,則返回基本MyDAO。我們假設K總是整數。
我已經寫了這樣的事情:
public Object getDAOForEntity(Class c)
{
createEmfa();
try {
Class eDao = Class.forName(getClass().getPackage().getName()+c.getSimpleName()+"DAO");
Constructor<?> cons = eDao.getConstructor(EntityManagerFactory.class);
return cons.newInstance(emfa);
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
return new MyDAO<Integer,?????>(emfa) {};
}
}
這個類,給定一個Class c
(說WhateverClass
)嘗試使用反射來創建使用參數化構造函數的WhateverClassDAO
實例。假設***DAO
類與工廠中的相同包(我試圖保持足夠簡單以便在此處發佈)。
在捕獲,因爲反射失敗,我假設沒有WhateverClassDAO,所以我想返回一個MyDAO<Integer,WhateverClass>
,但我不能在那裏通過正確的E
參數。我試圖通過Class<E>
作爲一個沒有運氣的論據。我基本上想知道什麼可以替代?????。
它超出了範圍,但所有這些代碼都在Singleton EJB中。
任何幫助,即使在正確的文檔鏈接形式,將不勝感激。
只有Chuck Norris可以在java中實例化一個抽象類。 – aviad
好,我當之無愧 – elbuild
我希望我沒有得罪。只是在開玩笑;)如果沒有這樣的DAO存在,我只會返回一個可選的缺席。 – aviad