3 回答

TA贡献2037条经验 获得超6个赞
像之前回答的那样,您应该使用:
Object value = field.get(objectInstance);
有时更喜欢的另一种方法是动态调用getter。示例代码:
public static Object runGetter(Field field, BaseValidationObject o)
{
// MZ: Find the correct method
for (Method method : o.getMethods())
{
if ((method.getName().startsWith("get")) && (method.getName().length() == (field.getName().length() + 3)))
{
if (method.getName().toLowerCase().endsWith(field.getName().toLowerCase()))
{
// MZ: Method found, run it
try
{
return method.invoke(o);
}
catch (IllegalAccessException e)
{
Logger.fatal("Could not determine method: " + method.getName());
}
catch (InvocationTargetException e)
{
Logger.fatal("Could not determine method: " + method.getName());
}
}
}
}
return null;
}
还应注意,当您的类继承自另一个类时,您需要递归确定Field。例如,获取给定类的所有字段;
for (Class<?> c = someClass; c != null; c = c.getSuperclass())
{
Field[] fields = c.getDeclaredFields();
for (Field classField : fields)
{
result.add(classField);
}
}

TA贡献1806条经验 获得超5个赞
尽管我不清楚您要实现的目标,但我在您的代码中发现了一个明显的错误: Field.get()期望包含该字段的对象作为参数,而不是该字段的某些(可能)值。所以你应该有field.get(object)。
由于您似乎正在寻找字段值,因此可以通过以下方式获得该值:
Object objectValue = field.get(object);
无需实例化字段类型并创建一些空/默认值;也许我错过了一些东西。
添加回答
举报