我想明白为什么下面不工作:动态实例创建没有泛型
public class HelloClass {
private class MyClass
{
public MyClass()
{
System.out.println ("Oh heck this is me!");
}
}
public Object newInstance (Object o)
{
try {
// java.lang.InstantiationException here
return o.getClass().newInstance();
} catch (Exception e) {
e.printStackTrace(System.out);
return null;
}
}
public void run()
{
MyClass m = new MyClass();
Object o = newInstance(m);
}
public static void main(String[] args)
{
HelloClass hd = new HelloClass();
hd.run();
}
}
我知道正确的方式通过声明的newInstance参数作为< T级>实现这一目标,但会想了解为什么不能像上面那样做。
UPD:这是我收到的例外:
java.lang.InstantiationException: HelloClass$MyClass
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at HelloClass.newInstance(HelloClass.java:14)
at HelloClass.run(HelloClass.java:24)
at HelloClass.main(HelloClass.java:30)
什么类,你试图实例?如果它是一个抽象类或接口,那么这将不起作用,你会得到一个InstantiationException。也许包括异常的堆栈跟踪会有所帮助。 – JasCav 2010-02-06 18:25:52
我想实例化MyClass,认为它很明显,因为我调用newInstance(m),其中m是MyClass的一个实例;)。向原始帖子添加了例外。 – azerole 2010-02-06 18:28:56
为什么在标题中提及泛型?他们与这个问题有什么关系? – skaffman 2010-02-06 18:40:18