【问题标题】:Invoking Integer.parseInt method using reflection使用反射调用 Integer.parseInt 方法
【发布时间】:2014-02-10 12:52:25
【问题描述】:

如何在某个变量上调用 parseInt 函数?我想做类似的事情 parseInt.invoke("23");

注意:我有一个存储 parseInt 的方法数组

Method[] methods contains the parseInt method

所以...就像 方法[0].invoke("23");

但是当我这样做时,我得到了

java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at myproject.MyProject.main(MyProject.java:114)

【问题讨论】:

    标签: java reflection methods


    【解决方案1】:

    Method#invoke(Object, Object...) 将第一个参数作为调用此方法的对象,从第二个nd 参数开始,它采用方法的参数。第一个参数必须是 实例方法 的引用,而 null 必须是 static 方法的引用。因为Integer#parseInt(String)static 方法。 invoke 方法的第一个参数必须是 null

    methods[0].invoke(null, "23"); 
    

    【讨论】:

    • 仍然收到 java.lang.IllegalArgumentException: wrong number of arguments 错误
    • @fadytaher 检查method[0] 是否真的是Integer#parseInt 方法?
    • System.out.println("这个解析函数被调用:"+m.get(0).getName()); System.out.print(m.get(0).invoke(null,"25"));
    • @fadytaher 那么你得到了什么输出?
    • @fadytaher 试试这个 - methods[0].invoke(null, "23", 10);。如果另一个失败,它应该可以工作。
    【解决方案2】:

    method[0] 是否返回 Integer 类的 parseInt 方法? 可能这会对你有所帮助:-

     Method m =Integer.class.getMethod("parseInt", String.class);
     System.out.println(m.invoke(null, "23"));
    

    String.class 是传递给 parseInt 的参数,即“23”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-08
      • 2011-06-21
      • 2018-02-18
      相关资源
      最近更新 更多