我试图弄清楚如何调用自定义类的方法。这是我正在尝试做的事情的过程:
1) 我从自定义类的方法列表中初始化一个方法数组,以及一个空的方法列表,该列表将用于保存这些方法的过滤列表。
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(...)
}
问题是,我知 Prop 体是什么我不知道,我只是很难找到答案。这些是我需要回答的问题:
1) 哪个对象将实际使用调用函数?就我而言,它是我想要调用的特定方法,还是我试图调用的类的实例?
2) 我知道调用函数将需要参数,其中之一是该方法的参数数据。我不清楚第一个参数到底是什么。我认为第一个参数是实际的方法本身,但后来我遇到了一个逻辑循环,因为我编码的方式有使用调用函数的方法,所以我被难住了。
3) 就我而言,我希望调用的方法实际上并不带任何参数,因此当我碰巧弄清楚调用函数如何工作时,我是否需要将其中一个参数设置为 null,或者我会忽略参数列表的那部分吗?
最佳答案
您错误地使用了.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");
}
}
输出:
method call
更多信息请参见 docs .
Invokes the underlying method represented by this Method object, on the specified object with the specified parameters.
您从未指定过对象或参数。我的示例不使用任何参数,因此我可以使用 null
来代替。但无论哪种方式,您都必须提供一个实例作为第一个参数(除非它是静态
)。
关于java - 使用反射调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20362439/