我想明白爲什麼下面不工作:動態實例創建沒有泛型
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