0

我是反思的新手。我面临一些错误。请帮忙。下面是我的代码:

EmployeeClass.java:

public class EmployeeClass {

    private String empID;
    private String empName;

    public String getEmpID() {
        return empID;
    }

    public void setEmpID(String empID) {
        this.empID = empID;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public EmployeeClass(String empID, String empName) { 
        this.empID = empID;
        this.empName = empName;
    }

    public String getAllDetails() {
        return empID + " " + empName;
    }

}

反射类.java:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ReflectionClass {

    public static void main(String[] args) {

        EmployeeClass emp = new EmployeeClass("1", "Emp1");
        Method method = null;
        try {
            method = emp.getClass().getMethod("getAllDetails", null);
            System.out.println(method.invoke(null, null));
        } catch (NoSuchMethodException | SecurityException
                | IllegalAccessException | IllegalArgumentException
                | InvocationTargetException e) {
            System.out.println(e.getMessage());
        }


    }

}

运行 ReflectionClass.java 时,出现以下错误:

线程“主”java.lang.NullPointerException 中的异常

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at myprgs.programs.ReflectionClass.main(ReflectionClass.java:14)
4

3 回答 3

5

您需要在调用时传递类的对象(其中包含您的方法)invoke(),如下所示:

method.invoke(emp, null);

改变:

System.out.println(method.invoke(null, null));

到:

System.out.println(method.invoke(emp, null));
于 2013-11-07T06:49:25.070 回答
1
 method = emp.getClass().getMethod("getAllDetails", null);
            System.out.println(method.invoke(null, null));

java.lang.reflect.Method.(Object obj, Object... args):第一个参数是要调用此特定方法的对象实例。但是,第一个参数应该是null, 如果方法是static. 因此,您需要使用以下实例调用empEmployeeClass

System.out.println(method.invoke(emp, null));

同样的第二个参数args:(invoke()我假设我可能已经知道了),如果底层方法所需的形式参数的数量为 0,则提供的args数组可能是长度0null.

于 2013-11-07T06:59:03.623 回答
0

更改了主要方法 - method.invoke 需要员工对象。

公共静态无效主要(字符串[]参数){

    Employee emp = new Employee("1", "Emp1");
    Method method = null;
    try {
        method = emp.getClass().getMethod("getAllDetails", null);
        System.out.println(method.invoke(emp, null));
    }
    catch (Exception e) {
        e.printStackTrace();
        System.out.println(e.getMessage());
    }
}
于 2013-11-07T07:32:33.817 回答