java - 无法通过反射调用带有 varargs 参数的方法 - NoSuchMethodException

标签 java reflection

我正在尝试使用反射来调用带有可变参数的方法。

并捕获了 NoSuchMethodException。我不知道这里出了什么问题。

代码:

public class ReflectionTest {

    public ReflectionTest() {   }

    private void varargMethod(String string, Integer ... var) {

        System.out.println("vargarMethod() called");
        System.out.println(string + " Number of args: " + var.length
                + "\nContents");

        for (int i = 0; i < var.length; i++) {
            System.out.printf(" args %d: %d", i, var[i]);
            //System.out.println(" args " + i + ": " + var[i]);
        }

        System.out.println();
    }

    public static void main(String[] args) throws Exception {

        Class[] parameterTypes = new Class[] { String.class, int.class, int.class, int.class };

        //System.out.println(Arrays.toString(parameterTypes));

        Method varMeth = test.getClass().getDeclaredMethod("varargMethod", parameterTypes);
        System.out.println("varMeth" + varMeth);

        Object[] arguments = new Object[] { new String("my perfect string"),
                new Integer(10), new Integer(100), new Integer(47) };

        varMeth.invoke(test, arguments);

它准确地抛出:

java.lang.NoSuchMethodException: ReflectionTest.varargMethod(java.lang.String, int, int, int)

  • 如何解决这个问题?

最佳答案

对于可变参数,参数类型应该是 Integer[].class,因为可变参数表达式指定参数是可变数组参数。所以正确的做法是:

Class[] parameterTypes = new Class[] { String.class, Integer[].class };

//System.out.println(Arrays.toString(parameterTypes));
ReflectionTest test = new ReflectionTest();
Method varMeth = test.getClass().getDeclaredMethod("varargMethod", 
                                                      parameterTypes);
System.out.println("varMeth" + varMeth);

Object[] arguments = new Object[] { new String("my perfect string"),
                                    new Integer[]{10, 100, 47}
                                  };

varMeth.invoke(test, arguments);

关于java - 无法通过反射调用带有 varargs 参数的方法 - NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20440839/

相关文章:

android - 由意外的 DEX 解析的类;

java - 为什么 Java 没有真正的多维数组?

java - 干净的代码,如何改进一个类

java - 如何在 Spring Batch 中链接多个 ItemReader?

.net - F# 转换为编译时未知的类型

c# - 查找类是否继承接口(interface)的更有效方法?

Java - 反向词序, vector

Java 单元测试模拟 HttpServletRequest getResourceAsStream

java - 确定静态方法是否是纯函数式的

go - 遍历具有嵌入结构的结构