Java 使用反射调用方法
我试图弄清楚如何调用自定义类的方法。以下是我尝试做的过程: 1) 我从自定义类的方法列表中初始化一个方法数组,并初始化一个空的方法列表,该列表将用于保存这些方法的筛选列表Java 使用反射调用方法,java,reflection,Java,Reflection,我试图弄清楚如何调用自定义类的方法。以下是我尝试做的过程: 1) 我从自定义类的方法列表中初始化一个方法数组,并初始化一个空的方法列表,该列表将用于保存这些方法的筛选列表 Method method[] = MyClass.getDeclaredMethods(); List<Method> x = new ArrayList<Method>(); 3) 最后,我需要调用最终列表中的每个方法。这就是我被卡住的地方,我不确定invoke函数是如何工作的。以下是我正在尝试的
Method method[] = MyClass.getDeclaredMethods();
List<Method> x = new ArrayList<Method>();
3) 最后,我需要调用最终列表中的每个方法。这就是我被卡住的地方,我不确定invoke函数是如何工作的。以下是我正在尝试的:
for(int i=0; i < x.size(); i++){
boolean g = x.get(i).invoke();
if(...)
else(...)
}
for(int i=0;i
问题是,我确切地知道它是什么我不知道,我只是很难找到答案。以下是我需要回答的问题:
1) 哪个对象将实际使用调用函数?在我的例子中,它是我想要调用的特定方法,还是我试图调用的类的实例
2) 我知道invoke函数需要参数,其中一个参数是方法的参数数据。我不清楚的是,第一个论点到底应该是什么。我认为第一个参数是实际的方法本身,但随后我遇到了一个逻辑循环,因为我对它的编码方式是使用调用函数的方法,所以我被难住了
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");
}
}
输出:
方法调用
更多信息请参阅
在具有指定参数的指定对象上调用此方法对象表示的基础方法
您从未指定过对象或参数。我的示例不使用任何参数,因此我可以将
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");
}
}
输出:
方法调用
更多信息请参阅
在具有指定参数的指定对象上调用此方法对象表示的基础方法
您从未指定过对象或参数。我的示例不使用任何参数,因此我可以将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");
}
}
输出:
方法调用
更多信息请参阅
在具有指定参数的指定对象上调用此方法对象表示的基础方法
您从未指定过对象或参数。我的示例不使用任何参数,因此我可以将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");
}
}
输出:
方法调用
更多信息请参阅
在具有指定参数的指定对象上调用此方法对象表示的基础方法
您从未指定过对象或参数。我的示例不使用任何参数,因此我可以将null
改为。但是无论哪种方法,您都必须提供一个实例作为第一个参数(除非它是静态的)。第一步:阅读方法#invoke()
javadoc。它回答了你的两个问题。那是什么?很抱歉,我对java非常陌生,所以我对它不熟悉。java以Javadoc的形式为其JDK提供了非常好的文档。您可以阅读方法类及其方法。当您刚接触java时,可能不应该从反射开始。第一步:阅读方法#invoke()
javadoc。它回答了你的两个问题。那是什么?很抱歉,我对java非常陌生,所以我对它不熟悉。java以Javadoc的形式为其JDK提供了非常好的文档。您可以阅读方法类及其方法。当您刚接触java时,可能不应该从反射开始。第一步:阅读方法#invoke()
javadoc。它回答了你的两个问题。那是什么?很抱歉,我对java非常陌生,所以我对它不熟悉。java以Javadoc的形式为其JDK提供了非常好的文档。您可以阅读方法类及其方法。当您刚接触java时,可能不应该从反射开始。第一步:阅读方法#invoke()
javadoc。它回答了你的两个问题。那是什么?很抱歉,我对java非常陌生,所以我对它不熟悉。java以Javadoc的形式为其JDK提供了非常好的文档。您可以阅读方法
类及其方法。当您刚接触java时,可能不应该从反射开始。如果它是静态
,您可以将实例或null
作为参数传递给第一个参数。是否确实需要抛出所有这些异常?原来那是我的一个大问题。“不过我现在已经弄明白了一切。@user2993636:要么扔,要么抓。”。我没有注意到它们,因为这会使我的注意力偏离我回答的实际目的,但任何超出代码示例的内容都应该正确处理异常。如果它是静态的
,您可以将实例或null
作为参数传递给第一个参数。是否确实需要抛出所有这些异常?原来那是我的一个大问题。“不过我现在已经弄明白了一切。@user2993636:要么扔,要么抓。”。我没有抓住他们是因为