这是星期五晚上,所以我可能会有点慢,但我无法解决我认为这是一个简单的问题。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