2013-02-28 94 views
2

我正在編寫一個示例應用程序來學習反射。我試圖調用從另一個類使用反射在一個類中的主要方法定義,但我得到無法使用反射調用主要方法 - IllegalArgumentException:參數類型不匹配

異常在線程「主」 java.lang.IllegalArgumentException異常:參數類型不匹配

查找下面我正在嘗試執行的代碼。

類從主要方法是調用

import java.lang.reflect.Method; 
public class Invoker { 


public static void main(String[] args) throws Exception { 
    Class clazz = Class.forName("com.nagpal.invokemainmethod.Invoked"); 

    Method method = clazz.getMethod("main", new Class[] { String[].class }); 

    Object[] params = new Object[4]; 

    params[0] = "arg 1"; 
    params[1] = "arg 2"; 
    params[2] = "arg 3"; 
    params[3] = "arg 4"; 

    method.invoke(null, new Object[] { params }); 
} 

類,其主要方法是調用

public class Invoked { 


public static void main(String[] args) { 
    if (args.length < 3) { 
     throw new IllegalArgumentException(); 
    } 

    for (int i = 0; i < args.length; i++) { 
     System.out.println("args[" + args[i] + "]"); 
    } 
    } 

    } 

回答

5

方法簽名是String[],但運行時型paramsObject[]。試試:

Object[] params = new String[4] 
6

你就要成功了:在params的類型應該是String[],不Object[]

String[] params = new String[4]; 

params[0] = "arg 1"; 
params[1] = "arg 2"; 
params[2] = "arg 3"; 
params[3] = "arg 4"; 

Trying通過Object[]main(String[])導致您看到的錯誤。