2012-03-13 68 views
1

以下是方法的這兩種情況下,其我調用使用反射錯誤而通過反射調用方法

actualoutput = mgenerateouput.invoke(outputclassinst,obj); 

objObject陣列類型包含在obj[0]

案例Section Type對象1:

public Student[] expectedOutputString(Section sec){ 
     //Object arra[] = Section.makeSection((String[])params[0]); 
     ReportCard rc = new ReportCard(); 
     Student[] exOut = rc.orderClass(sec); 
     return exOut; 
    } 

它的工作在第一種情況下PERF ECT但在當我聲明參數類型爲Object下面第二殼體我得到IllegalArgumentException

情況2:

public Student[] expectedOutputString(Object params[]){ 
    //Object arra[] = Section.makeSection((String[])params[0]); 
    ReportCard rc = new ReportCard(); 
    Student[] exOut = rc.orderClass((Section)params[0]); 
    return exOut; 
} 

[

+0

它應該是在情況2 rc.orderClass((Section)params [0]);不是第二個 – Zavael 2012-03-13 08:21:53

+0

哪條線投擲IAE? – 2012-03-13 08:26:29

+0

actualoutput = mgenerateouput.invoke(outputclassinst,obj); – 2012-03-13 08:28:52

回答

0

代碼2沒有聲明參數作爲對象,但作爲對象[],即對象的陣列。所以你的obj [0]也必須是一個對象數組。 編輯:或者周圍的其他方法:代碼2應該指望對象的對象,而不是[]。爲什麼在案例2中沒有使用可變參數

rc.orderClass((Section)params[0]); // was: Second 
       ^^^^^^^ 
+0

[回覆刪除評論]我不知道這是如何處理反射方法調用。我本來期望立即拋出一個NullPointerException。但即使處理了這個,一個'null'被傳遞給了實際的方法,在一個null數組上訪問params [0]會拋出一個NPE。和空數組上的IndexOutOfBoundsException(?)。 – user1252434 2012-03-13 08:24:24

+0

確定我期待到同一個問題:) – 2012-03-13 08:29:49

+0

java.lang.IllegalArgumentException異常:參數類型不匹配,仍然得到了同樣的問題 – 2012-03-13 08:32:03

1

可能是一個錯字? Like:

public Student[] expectedOutputString(Object ... params){ 
+0

只是段,對不起在輸入錯誤之後 – 2012-03-13 08:24:11

0