我做到了這一點,但我知道,我強烈支付我認爲這被認爲是糟糕的編程。 我做到了,因爲有人強迫我這樣做! (我認爲最好的解決辦法是編寫更多的代碼......這是最快的)。
public String getNestedDeclaredField(Object obj, String fieldName) {
if (null == fieldName) {
return null;
}
String[] fieldNames = fieldName.split("\\.");
Field field = null;
Class<? extends Object> requestClass = obj.getClass();
for (String s : fieldNames) {
try
{
field = getSuperClassField(requestClass,
requestClass.getSimpleName(), s);
field.setAccessible(true);
obj = field.get(obj);
if (null == obj) {
return null;
}
requestClass = obj.getClass();
}
catch (Exception e) {
log.error("Error while retrieving field {} from {}", s,
requestClass.toString(), e);
return "";
}
}
return obj.toString();
}
public Field getSuperClassField(Class<? extends Object> clazz,
String clazzName, String fieldName) throws NoSuchFieldException {
Field field = null;
try{
field = clazz.getDeclaredField(fieldName);
}
catch (NoSuchFieldException e) {
clazz = clazz.getSuperclass();
if (StringUtils.equals(clazz.getSimpleName(), "Object")) {
log.error("Field {} doesn't seem to appear in class {}",
fieldName, clazzName);
throw new NoSuchFieldException();
}
field = getSuperClassField(clazz, clazzName, fieldName);
}
catch (Exception e) {
log.error("Error while retrieving field {} from {}", fieldName,
clazz.toString(), e);
}
return field;
}
哪裏fieldName的是(對於zipCd):addr.zip.zipCd
它將從Employee對象檢索zipCd的字符串值。
執行setters,然後您將能夠設置值。 –
我想使用反射來迭代這種類型的任何Java bean並修改其值。 – Girish
你做這種事情的用例是什麼?你是否正在從數據庫中讀取和讀取數據?然後考慮使用JPA或Hibernate。你是序列化還是去序列化JSON/XML /其他格式?然後考慮JAXB或類似的。 – slartidan