我试图在运行时获得对象的字段和它们的值。下面是代码示例:
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循环中的字段值并应用业务逻辑。这可能吗?我尝试了很多方法,但都不成功。
field:Object get(Object obj)此方法返回指定对象上由此字段表示的字段的值。
我错过了field.get(Object)
方法。这将解决这个问题。
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