我想使用我使用的第三方软件包中的方法。这是签名:
java.lang.String buildMenuPath(java.lang.Object... objects);
该方法可以如下使用(仅举几例):
buildMenuPath(1,1,1) //3 ints
buildMenuPath("str",1,1) // 1 string 2 ints
buildMenuPath("str",1) // 1 string 1 int
通过反思,我尝试使用此方法,并遵循#2和#3的用法。
尝试#1,获取我将使用的确切签名(String.class, Integer.class
)
ArrayList pathArr = new ArrayList();
pathArr.add("Window");
pathArr.add(i);
Method method = myObj.getClass().getMethod("buildMenuPath",String.class, Integer.class);
method.invoke(myObj,pathArr.toArray())
java.lang.NoSuchMethodException
尝试#2,获取任意参数方法:
ArrayList pathArr = new ArrayList();
pathArr.add("Window");
pathArr.add(i);
Method method = myObj.getClass().getMethod("buildMenuPath",Object[].class);
method.invoke(myObj,pathArr.toArray())
java.lang.IllegalArgumentException
但是,如果我手动调用,myObj.buildMenuPath("Window",6);
可以正常工作。
如何通过反思来解决这个问题?
答案 0 :(得分:1)
您需要知道函数的确切签名(通过文档查看),例如,它可能需要Object类型的参数的变量列表,或者它可能被重载,但参数类型可能不是{{1} }和String
。
最后,在调用int
时,将参数数组转换为Invoke()
在你的情况下,应该是:
(Object)