我正在尝试使用Java的思考来为项目创建模块加载器,但getMethod()方法似乎拒绝找到存在的方法,即使方法已明确定义。
在Module.class文件中:
public final void load(org.clustermc.core.ClusterCore plugin);
我让核心打印出它在Class中找到的方法。结果:
Methods: [public void me.capit.clustersample.SampleModule.onLoad(), public void me.capit.clusterSample.SampleModule.onUnload(), public final void org.clustermc.core.Module.load(org.clustermc.core.ClusterCore), /*Other stuff from Object*/];
请注意,SampleModule扩展了Module。
核心:
Method enable = c.getMethod("onLoad");
Method init = c.getMethod("load", org.clustermc.core.ClusterCore.class);
onLoad()的'enable'变量工作正常,但是在尝试查找load(ClusterCore.class)时,我得到NoSuchMethodException。为什么......?
答案 0 :(得分:0)
检查加载方法的范围,如果它是私有的,则不会被访问。你需要设置一个真实的。注意getDeclaredMethod而不是getMethod。
Method init = c.getDeclaredMethod("load", org.clustermc.core.ClusterCore.class);
在调用之前,您需要执行以下行: -
init.setAccessible(true);