【问题标题】:Which arguments to add when invoking method调用方法时要添加哪些参数
【发布时间】:2018-03-03 18:41:54
【问题描述】:

我在调用另一个类的方法时遇到问题。这是我正在使用的代码:

Contact[] database=players1();

System.out.println(sortalg[i]);
try {
    Method method = Sorting.class.getMethod("selectionSort", Comparable[].class);
    method.invoke(database);
}

这是我要调用的方法:

public static void selectionSort (Comparable[] data)
{
  int min;

  for (int index = 0; index < data.length-1; index++)
  {
     min = index;
     for (int scan = index + 1; scan < data.length; scan++)
        if (data[scan].compareTo(data[min]) < 0)
           min = scan;

     swap(data, min, index);
  }
}

这是我得到的错误:

java.lang.IllegalArgumentException:参数数量错误

我必须添加哪些参数?

【问题讨论】:

  • 你的Contact类是什么样的?
  • Contact 是否实现 Comparable
  • 方法是public static所以这里不需要使用反射。只需致电ClassName.selectionSort(database)
  • @Tobias Geiselmann 这就是 Contact 类的样子 public class Contact implements Comparable { private String firstName, lastName, phone; public Contact (String first, String last, String telephone) { firstName = first; lastName = last; phone = telephone; }
  • @QBrute 我正在尝试从字符串输入中调用一个方法,这样我就可以一次性遍历许多不同的方法

标签: java invoke illegalargumentexception getmethod


【解决方案1】:

为什么要使用反射来调用静态方法? 假设Contact 实现Comparable,你为什么不直接调用

Sorting.selectionSort(database);

? 如果必须使用反射,则必须传递对象以调用方法,在您的情况下为null

 method.invoke(null, database);

this question

【讨论】:

  • 我想使用反射,因为我正在循环大量不同的排序算法。我将所有算法的名称放在一个字符串数组中,从那里我想我需要使用反射来从字符串调用方法。不幸的是,在调用中添加一个 null 并没有帮助......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 2010-09-19
  • 1970-01-01
  • 2021-10-11
  • 2019-10-22
  • 1970-01-01
相关资源
最近更新 更多