2012-03-15 70 views
1

看看我的代碼....如何類轉換爲實例對象

Class<?> c = Class.forName("PerformanceInvokeService"); 

    Method m = c.getDeclaredMethod("monthlyTestCal", new Class[] { 
      String.class, Date.class }); 
    Object ret = m.invoke("PerformanceInvokeService", new Object[] { 
      "some string", new Date() }); 
    System.out.println(ret); 

我執行這個和它引發的異常

java.lang.IllegalArgumentException: object is not an instance of declaring class 

我想,因爲我不創建一個C的實例(喜歡...新的PerformanceInvokeService()) ,我不知道如何創建它

有人幫忙?

對不起我的英語...

感謝

+0

選中此鏈接。關於如何解決這個問題,有一些好的觀點http://ourcraft.wordpress.com/2009/01/23/object-is-not-an-instance-of-declaring-class/ – 2012-03-15 04:46:36

+0

我編輯了標籤以更好地分類問題。你應該記住,每個標籤都是獨立的;他們不形成一個句子。 (例如,將關於「實例」的問題與關於「實例」的其他問題分組是沒有意義的,但是它將把有關Java的問題與關於Java的其他問題進行分組是有意義的。) – Wyzard 2012-03-15 04:50:55

回答

2

如果PerformanceInvokeService具有可訪問的默認構造函數,則可以使用創建一個新的實例:

Object instance = c.newInstance(); 

然後,您可以傳遞給方法調用:

Object ret = m.invoke(instance, new Object[] { "some string", new Date() }); 

如果沒有訪問默認構造函數,那麼你必須找到一個你可以使用反射的構造函數。

0

ClassnewInstance()方法,您可以調用創建使用它的默認構造函數的類的實例。或者,您可以撥打getConstructor()getConstructors()查找構造函數,然後在Constructor對象上調用newInstance(),傳遞構造參數。

0

您需要添加

Object myInstance = c.newInstance(); 

這將調用默認的構造函數,並創建一個新的對象。那麼你可以使用這個作爲第一個參數

m.invoke() 
相關問題