【发布时间】:2014-04-28 17:20:29
【问题描述】:
我正在使用 JBoss 7.1.3 和 Java 6。我无法弄清楚我需要用什么来代替“???”在下面的代码中让我的方法正常工作。我想要的是实例化我的“T”类的一个实例,每次实例化该类时调用泛型构造函数。下面是方法……
public class MyClass<T extends AbstractModel>
{
public void myMethod()
{
…
final HashMap<String, String> data = new HashMap<String, String>();
final T item = getInstance(???, data);
}
private T getInstance(final Class<T> class1,
final HashMap<String, String> data)
{
T retObj = null;
try
{
Constructor ct = class1.getDeclaredConstructor(HashMap.class);
Object[] argList = new Object[1];
argList[0] = data;
retObj = (T) ct.newInstance(argList);
} catch (Exception e)
{
} // try
return retObj;
} // getInstance
这是我的抽象模型类的构造函数……
public abstract class AbstractDIDOModel
{
protected HashMap<String, String> data;
AbstractModel(final HashMap<String, String> data)
{
this.data = data;
}
【问题讨论】:
-
您只需将
class1传递给MyMethod。 -
是的,但是怎么做?这就是我的问题的要点。如果您知道,请随时回答,我会接受。
-
被调用的
MyMethod必须知道为class1传递什么。您必须明白,这没有简单的答案,因为 Java 实际上并没有将T表示的类型存储在任何地方——您必须自己跟踪。
标签: java generics instantiation