所以,我有这个功能:
public Object findObject(Object object, String name) {
if (object == null) {
return null;
}
for (Field foundField : object.getClass().getDeclaredFields()) {
if (foundField.getName().equalsIgnoreCase(name)) {
try {
return foundField.get(object);
} catch (IllegalArgumentException e) {
ClientImpl.getInstance().getUtil().addChatMessage(ClientImpl.getInstance().getLogo() + "Invalid argument.");
} catch (IllegalAccessException e) {
ClientImpl.getInstance().getUtil().addChatMessage(ClientImpl.getInstance().getLogo() + "Invalid argument.");
}
}
}
return null;
}
这样会返回一个对象的所有声明字段,而且它是超类,我有这个循环:
objectName = objectName.replace("main/", "");
String[] split = objectName.split("/");
for (int i = 0; i < split.length; i++) {
object = this.findObject(object, split[i]);
}
初始对象是一个类,假设该类被称为Main
。
我输入的内容如下:
main/gameWorld/gameData
它会在初始对象中搜索名为gameWorld
的任何字段,一旦发现它将当前对象设置为gameWorld
并搜索该对象以查找名为gameData
的任何字段。如果我输入这样的内容,这是有效的:
main/gameWorld
但如果我这样做
main/gameWorld/gameData
它声称对象是null
。
答案 0 :(得分:0)
我认为问题可能在于您没有查询超类中的字段,因此找不到字段gameData
。来自getDeclaredFields
的JavaDoc:
返回
Field
个对象的数组,这些对象反映由此Class
对象表示的类或接口声明的所有字段。这包括公共,受保护,默认(包)访问和私有字段,但不包括继承字段。
因此,如果包含GameWorld
的{{1}}继承自具有此字段的超类,即
gameData
情况就是这样。