Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用反射调用方法_Java_Reflection - Fatal编程技术网

Java 使用反射调用方法

Java 使用反射调用方法,java,reflection,Java,Reflection,我试图弄清楚如何调用自定义类的方法。以下是我尝试做的过程: 1) 我从自定义类的方法列表中初始化一个方法数组,并初始化一个空的方法列表,该列表将用于保存这些方法的筛选列表 Method method[] = MyClass.getDeclaredMethods(); List<Method> x = new ArrayList<Method>(); 3) 最后,我需要调用最终列表中的每个方法。这就是我被卡住的地方,我不确定invoke函数是如何工作的。以下是我正在尝试的

我试图弄清楚如何调用自定义类的方法。以下是我尝试做的过程:

1) 我从自定义类的方法列表中初始化一个方法数组,并初始化一个空的方法列表,该列表将用于保存这些方法的筛选列表

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:要么扔,要么抓。”。我没有抓住他们是因为