我试图弄清楚如何调用自定义类的方法。这是我想要做的过程:
1)我从我的自定义类的方法列表中初始化一个方法数组,以及一个空的List of Method,它将用于保存这些方法的过滤列表。
Method method[] = MyClass.getDeclaredMethods();
List<Method> x = new ArrayList<Method>();
2)然后,我通过for循环运行我的方法数组,并过滤掉任何不符合我要求的标准的方法。
for (Method m : methods){
if(...){
if(...){
x.add(m);
}
}
}
3)最后,我需要调用最终列表中的每个方法。这是我被卡住的地方,我不确定调用函数是如何工作的。这是我正在尝试的:
for(int i=0; i < x.size(); i++){
boolean g = x.get(i).invoke();
if(...)
else(...)
}
问题是,我知道它究竟是什么我不知道,我只是找不到答案。这些是我需要回答的问题:
1)哪个对象实际上会使用调用函数?在我的例子中,它是我想要调用的特定方法,还是我试图调用的类的实例?
2)我知道invoke函数将需要参数,其中一个参数是方法的参数数据。我不清楚的是第一个论点究竟是什么。我认为第一个参数是实际的方法本身,但后来我遇到了一个逻辑循环,因为我编码的方式有使用invoke函数的方法,所以我很难过。
3)在我的例子中,我想调用的方法实际上并没有采用任何参数,所以当我确实想弄清楚调用函数是如何工作的时候,我是否需要将其中一个参数设置为null,或者我会省略参数列表中的那部分吗?
答案 0 :(得分:3)
您错误地使用了.invoke
。见这个简短的例子:
public class Test {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
X obj = new X();
Method method = obj.getClass().getMethod("test", null);
method.invoke(obj, null);
}
}
class X {
public void test(){
System.out.println("method call");
}
}
输出:
方法调用
docs。
中的更多信息在具有指定参数的指定对象上调用此Method对象表示的基础方法。
您从未指定过对象或参数。我的示例不使用参数,因此我可以改为null
。但无论哪种方式,您都必须提供一个实例作为第一个参数(除非它是static
)。