【发布时间】:2014-05-14 14:35:57
【问题描述】:
潜伏已久,第一次发帖。我已尝试搜索,但找不到任何解决问题的方法。
基本上,我正在为游戏模组编写一个插件,以便为闭源模组添加更多功能。由于它已关闭,并且最初的开发者是日本人,我认为反射可能是我最好的选择。
我能够获得我需要的类中所有字段的数组,但我无法获得任何字段的值。我需要获取“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();
}
}
}
【问题讨论】:
-
什么是
baseClass?你为什么不直接使用field2? -
请同时发布您正在反思的课程。
标签: java exception reflection field nosuchfieldexception