反射中的java.lang.NoSuchFieldException?

反射中的java.lang.NoSuchFieldException?,java,exception,reflection,field,nosuchfieldexception,Java,Exception,Reflection,Field,Nosuchfieldexception,长期潜伏者,第一次在这里张贴海报。我已尝试搜索,但找不到任何解决问题的方法 基本上,我正在为一个游戏模块编写一个插件,以便在封闭源代码模块中获得更多功能。由于它是封闭的,而且最初的开发人员是日本人,我想反射可能是我最好的选择 我能够得到我需要的类中所有字段的数组,但是我不能得到任何字段的值。我需要得到“currentThrottle”值,这样我可以在实体移动时做一些事情(并且仅当它移动时) 这是我目前的密码。我不明白为什么它不工作,因为正如你所看到的,我使用if语句来确保字段确实存在,然后它仍然

长期潜伏者,第一次在这里张贴海报。我已尝试搜索,但找不到任何解决问题的方法

基本上,我正在为一个游戏模块编写一个插件,以便在封闭源代码模块中获得更多功能。由于它是封闭的,而且最初的开发人员是日本人,我想反射可能是我最好的选择

我能够得到我需要的类中所有字段的数组,但是我不能得到任何字段的值。我需要得到“currentThrottle”值,这样我可以在实体移动时做一些事情(并且仅当它移动时)

这是我目前的密码。我不明白为什么它不工作,因为正如你所看到的,我使用if语句来确保字段确实存在,然后它仍然告诉我它找不到它

最后说明;我在Java完全自学成才,我所知道的一切都是从阅读这样的论坛,然后潜入其中,玩它;这是我学习的最好方法。因此,如果这里有任何非常糟糕的做法,请务必让我知道:)

Class planeClass=Class.forName(“mcheli.plane.MCP_EntityPlane”);
Field[]fields=planeClass.getFields();
//其他一些不相关的代码
用于(字段2:字段){
字符串名称=field2.getName();
如果(name.contains(“currentThrottle”){
System.out.println(“名称:”+name);
试一试{
field=baseClass.getClass().getField(名称);
字段。setAccessible(true);
类targetType=field.getType();
Object objValue=targetType.newInstance();
对象值=field.get(objValue);
System.out.println(“节流阀:+值);
}捕获(无此字段例外){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(安全异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(实例化异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(非法访问例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}

变量objValue应替换为要从中获取字段的对象实例:

Object value = field.get(objValue);
应该是:

Object value = field.get(baseClass)

您的代码没有显示基类是什么。你在和你认为你正在使用的班级一起工作吗

为什么不直接使用(未显示try/catch):


什么是
基类
?你为什么不直接使用
field2
?请把你正在反思的课程也贴出来。
Object value = field.get(baseClass)
Class planeClass = Class.forName("mcheli.plane.MCP_EntityPlane");
Object plane = planeClass.newInstance();
Field throttleField = planeClass.getField("currentThrottle");
Object thottleValue = throttleField.get(plane);