代码之家  ›  专栏  ›  技术社区  ›  AConsumer

无法使用Java中的反射调用具有变量参数的方法

  •  0
  • AConsumer  · 技术社区  · 6 年前

    当方法 是( 其中m是使用反射调用的方法 )

    public static Optional<JsonNode> concat(ObjectNode entity, String separator, String fieldName1,
              String fieldName2) 
    

    然后我可以得到计算出的值( 其中,计算值是使用反射获得的值)

    同时,当方法

    public static Optional<JsonNode> concat(ObjectNode entity, String ...separatorAndField)
    

    那么我就不能得到计算出的值

    我调用的方法如下:

       computedValue = (Optional<JsonNode>) m.invoke(null, methodArgs);
    

    注: 方法参数声明为对象数组。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Michael    6 年前

    以下是通过反射调用varargs和非varargs静态方法之间的区别:

    class Main
    {
        public static void foo(String fieldName1, String fieldName2)
        {
            System.out.println(fieldName1 + "," + fieldName2);
        }
    
        public static void bar(String... fields)
        {
            System.out.println(String.join(",", fields));
        }
    
        public static void main(String[] args) throws Exception
        {
            final Method foo = Main.class.getMethod("foo", String.class, String.class);
            foo.invoke(null, "aaa", "bbb");
    
            final Method bar = Main.class.getMethod("bar", String[].class);
            bar.invoke(null, (Object) new String[] {"ccc", "ddd", "eee"});
        }
    }
    

    输出:

    aaa,bbb
    ccc,ddd,eee