使用Java Reflection在运行时获取字段及其值



我试图在运行时获得对象的字段和它们的值。下面是代码示例:

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.classDate.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

相关内容

  • 没有找到相关文章

最新更新