2013-02-28 3 views
2

Я пишу пример приложения для изучения рефлексии. Я пытаюсь вызвать основной метод определения в одном классе из другого класса с помощью отражения, но я получаюНевозможно вызвать основной метод с использованием Reflection - 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[], но время исполнения params составляет Object[]. Попробуйте:

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"; 

Попытка пройти Object[] до main(String[]) вызывает ошибку, которую вы видите.

Смежные вопросы