我很反思。我面临一些错误。请帮忙。以下是我的代码:
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;
}
}
ReflectionClass.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时,我收到以下错误:
线程“main”中的异常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)
答案 0 :(得分:5)
您需要在调用invoke()
时传递类的对象(包含您的方法),如下所示:
method.invoke(emp, null);
变化:
System.out.println(method.invoke(null, null));
要:
System.out.println(method.invoke(emp, null));
答案 1 :(得分:1)
method = emp.getClass().getMethod("getAllDetails", null);
System.out.println(method.invoke(null, null));
java.lang.reflect.Method.(Object obj, Object... args)
:第一个参数是要在其上调用此特定方法的对象实例。但是,第一个参数应为 null
,如果方法为 static
。因此,您需要使用emp
的实例EmployeeClass
调用:
System.out.println(method.invoke(emp, null));
args
的第二个参数invoke()
:(我假设我可能已经知道它),如果底层方法所需的形式参数的数量为0,则提供{{1}数组的长度可以是args
或0
。
答案 2 :(得分:0)
更改了main方法 - method.invoke需要employee对象。
public static void main(String [] args){
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());
}
}