无法使用java中的反射调用带有变量参数的方法

时间:2018-05-24 10:00:53

标签: java reflection

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

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

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

当方法 m

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

然后我无法获得计算值

我按如下方式调用方法: -

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

注意: - methodArgs被声明为对象数组。

1 个答案:

答案 0 :(得分:1)

这是通过反射调用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