参数类型不匹配:简单案例

时间:2017-09-07 09:05:35

标签: java reflection illegalargumentexception

我有关于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对象听起来与我的期望一致,即:

Arguments of the method

My argument's array

有什么想法吗? 在任何重复标记之前,我已经检查了这些标记,并且没有任何内容完全相同,也不起作用:

This one构造了一个方法列表,事实上他有两个或更多具有相同名称的方法,但不是相同的参数。 The second one错误,因为他传递了一个String []作为参数,并且编译器错误地解释了完整参数列表的对象。 The third one是因为他忘了通过辩论。

1 个答案:

答案 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);
}