我有关于IllegalArgumentException的这个着名问题,我无法弄清楚为什么。这是我的班级:
public class DataMapper {
... An lot of others methods that does not have the same name (because I created a method specifically for checking this exception
private void hello(String ahem) {
logger.info("Hey !");
}
}
在我的测试用例中(我尝试调用我的方法):
@Test
public void test() {
Class<?> targetClass = DataMapper.class;
try {
Object t = targetClass.newInstance();
Class<?>[] cArg = new Class[1];
cArg[0] = String.class;
Method method = targetClass.getDeclaredMethod("hello", cArg);
method.setAccessible(true);
method.invoke(t, cArg);
} catch(NoSuchMethodException e) {
logger.error("Name does not exist : ", e);
Assert.fail();
} catch (Exception e) {
logger.error("It is broken : ", e);
Assert.fail();
}
}
它总是落在IllegalArgumentException上。 Method
对象听起来与我的期望一致,即:
有什么想法吗? 在任何重复标记之前,我已经检查了这些标记,并且没有任何内容完全相同,也不起作用:
This one构造了一个方法列表,事实上他有两个或更多具有相同名称的方法,但不是相同的参数。 The second one错误,因为他传递了一个String []作为参数,并且编译器错误地解释了完整参数列表的对象。 The third one是因为他忘了通过辩论。
答案 0 :(得分:1)
在这一行:
method.invoke(t, cArg);
您必须传递String
而不是cArg
,而Class
数组为method.invoke(t, "Test");
。以下内容将起作用:
void abcd(int , char);
void main()
{
extern void abcd(char);
abcd (q);
}