如何找到字段的声明字段?

时间:2013-12-28 15:03:38

标签: java reflection

所以,我有这个功能:

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

1 个答案:

答案 0 :(得分:0)

我认为问题可能在于您没有查询超类中的字段,因此找不到字段gameData。来自getDeclaredFields的JavaDoc:

  

返回Field个对象的数组,这些对象反映由此Class对象表示的类或接口声明的所有字段。这包括公共,受保护,默认(包)访问和私有字段,但不包括继承字段

因此,如果包含GameWorld的{​​{1}}继承自具有此字段的超类,即

gameData

情况就是这样。