长时间的潜伏者,这里的第一次海报。我已经尝试过搜索但无法找到解决问题的方法。
基本上,我正在为游戏mod编写一个插件,以便为闭源mod提供更多功能。由于它已经关闭,而原始开发者是日本人,我认为反思可能是我最好的选择。
我能够获得所需课程中所有字段的数组,但我无法获得任何字段的值。我需要得到" currentThrottle"价值,所以我可以在实体移动时做一些事情(只有当它移动时)
这是我目前的代码。我无法弄清楚它为什么不起作用,因为你可以看到我使用if语句来确保字段存在,然后它仍然告诉我它无法找到它。
最后的说明;我完全是自学成才的Java,我所知道的一切都来自这样的阅读论坛,只是潜入并玩它;这是我学习的最佳方式。所以,如果这里有任何非常糟糕的做法请告诉我:)
Class planeClass = Class.forName("mcheli.plane.MCP_EntityPlane");
Field[] fields = planeClass.getFields();
//Some other irrelevant code
for (Field field2 : fields) {
String name = field2.getName();
if (name.contains("currentThrottle")) {
System.out.println("name: " + name);
try {
field = baseClass.getClass().getField(name);
field.setAccessible(true);
Class<?> targetType = field.getType();
Object objValue = targetType.newInstance();
Object value = field.get(objValue);
System.out.println("Throttle: " + value);
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
变量objValue应该替换为您想要从中获取字段的对象实例:
Object value = field.get(objValue);
应该是:
Object value = field.get(baseClass)
答案 1 :(得分:0)
您的代码没有显示baseClass是什么。您是否正在使用您认为正在使用的班级?
为什么不使用(try / catch未显示):
Class planeClass = Class.forName("mcheli.plane.MCP_EntityPlane");
Object plane = planeClass.newInstance();
Field throttleField = planeClass.getField("currentThrottle");
Object thottleValue = throttleField.get(plane);