我想通过反射来访问模型的属性,如
Object o = ...; // The object you want to inspect
Class<?> c = o.getClass();
Field f = c.getField("myColor");
f.setAccessible(true);
String valueOfMyColor = (String) f.get(o);
但我仍然得到该财产不存在的错误。然后我发现RealmModel对象用RealmProxy类包装,这可能就是原因。
所以问题是,如何通过字符串访问RealmModel属性?通过反思或其他方式。
答案 0 :(得分:2)
您需要调用realmGet$fieldName()
方法,或者像getFieldName()
方法
例如,我做了这个
public static String getFieldThroughGetterAsStringTransform(Object target, String property) {
try {
Method method = target.getClass().getMethod("get" + StringUtils.capitalize(property));
Object getResult = method.invoke(target);
return getResult != null ? getResult.toString() : null;
} catch(Exception e) {
Log.e(TAG, "Failed to map property [" + property + "] on object [" + target + "]");
throw new RuntimeException(e);
}
}
和
String fieldValue = FieldTransformer.getFieldThroughGetterAsStringTransform(managedObject, fieldName);
但你可以看看other ways of calling getter,就像Apache Commons BeanUtils:
Object value = PropertyUtils.getProperty(person, "name");
答案 1 :(得分:1)
我更喜欢copyFromRealm
此对象并将其反映为常规对象