我试图在运行时获取对象的字段及其值。以下是代码示例:
public static int calculateProfileStrenght(Object inputObj,
Map<String, Integer> configMap) throws IllegalArgumentException,
IllegalAccessException {
int someValue= 0;
for (Entry<String, Integer> entry : configMap.entrySet()) {
System.out.println("Key=" + entry.getKey() + ", Value="+ entry.getValue());
try {
Field field = inputObj.getClass().getDeclaredField(entry.getKey());
} catch (NoSuchFieldException e) {
System.out.println("No such field: "+entry.getKey());
}
}
return someValue;
}
如上所示,Map包含键值对,其中键将成为inputObj
的字段名称(或变量名称)。我需要从inputObj
读取此字段的值。字段的数据类型是String,int,Date等。
inputObj
public class UserDetails {
private int userId;
private String userName;
private Date joinedDate;
private Address homeAddress;
private String description;
// getters and setters
}
我无法执行field.getLong或getChar等,因为该方法是通用的,并且不知道inputObj
字段的数据类型。
我需要读取for循环中的字段值并应用业务逻辑。这甚至可能吗?我尝试了很多方法,但没有运气。任何引用/指针都表示赞赏。
答案 0 :(得分:1)
如何在Filed:Object get(Object obj)中使用此方法 此方法返回指定对象上此Field表示的字段的值。
答案 1 :(得分:0)
我错过了field.get(Object)
方法。这将解决问题。
答案 2 :(得分:-1)
field.getType()
会返回字段的类型(int.class
,Date.class
等)。您可以根据其返回值轻松执行不同的操作。
Class<?> type = field.getType();
if(type == int.class) {
// load an int
} else if(type == Date.class) {
// load a Date
} else if(type == String.class) {
// load a String
}
// etc