我正在尝试调用一个方法对象,对于一个未知的类,参数将在一个字符串数组中,如何在调用方法对象时将其作为参数传递?
例如
method.invoke(obj, arg1, arg2,...);
我有
String[] args = {"arg1", "arg2"...}
根据用户输入,字符串数组每次都会不同,从而产生不同的参数。
答案 0 :(得分:1)
如果该对象的方法只有String的参数或String的任何Compatible类型,则可以将args作为整体传递。 更改 String [] args = {“arg1”,“arg2”...}; 至 对象[] args = {“arg1”,“arg2”...}; 像这样 : method.invoke(obj,args);
确保获得方法对象时:class.getMethod(“method”,types); arg类型必须与您将传递的args的数量和类型相匹配。 例如 : Class [] types = {String.class,String.class,String.class}; 与...匹配 对象[] args = {“arg1”,“arg2”,“arg3”}; 但没有 对象[] args = {“arg1”,“arg2};
动态调用
假设方法只接受字符串(否则你需要更复杂的映射) psedo代码:
方法:
获取方法名称。
示例:print //存储在变量methodName
上参数数量:
获取用户输入的列表或数组
示例:args = {“bla”,“bla”...}
类型:
有类型arraylist。
每个arg的,Do arraylist.add(String.class)//或任何其他类if if不是String
Class [] types = {};
types = arraylist.toArray(types);
现在您需要打电话:
someClass.getMethod(methodName,types).invoke(instanceofSomeClass,args); // this
适用于用户输入的任何参数