java - 无法调用通过反射获得的方法
问题描述
我收到错误
Cannot invoke "Object.getClass()" because "obj" is null
在线上
m.invoke(null);
以下是课程:
package device;
public class Conveyor {
private String ID;
public Conveyor(String ID) {this.ID = ID;}
public void Start() {
}
public void Stop() {
}
}
package main;
import java.lang.reflect.Method;
import device.Conveyor;
public class Main {
public static void main(String args[]) {
Conveyor myConveyor = new Conveyor("C1");
Class<Conveyor> conveyorClass = (Class<Conveyor>) myConveyor.getClass();
for (Method m : conveyorClass.getMethods()) {
System.out.println(m.getName());
if (m.getName().equals("Start")) {
try {
m.invoke(null);
} catch (Exception ex) {
System.err.println(ex.getLocalizedMessage());
}
}
}
}
}
解决方案
根据文档,invoke 方法接收将调用该方法的对象的引用。因此,您需要将代码更改为:
m.invoke(myConveyor);
推荐阅读
- python - 如何让这个脚本检查目录中的每个文件但不记录每个单独的检查?
- java - 如何通过 css 更改 JavaFX ComboBox 的箭头按钮中的背景颜色?
- c# - 如何将两个不同的控件动态绑定到单个数据网格单元中的两个不同的数据源
- events - AEM 6.3 设置 PageEvent 处理程序/侦听器
- android - 没有活动的 Airbnb-DeepLinkDispatch
- c# - 如何修复“EntryPointNotFoundException”
- vim - 在vim中沿左边距创建一个4-5个字符的列
- asp.net - Asp.Net 注释导致 VS Code 语法高亮停止工作
- r - 使用 R 中的函数迭代包含不同长度的列号列表的数据框
- c# - MongoDB 查询到 C# 等效的 ObjectID 子集