java - 从Java中的对象获取强类型属性值

标签 java object reflection type-conversion

在 Java 中使用属性名称作为字符串来获取属性的强类型值的最佳方法是什么。

例如:一个 Person 类,其年龄字段为整数,比如 21。如果下面的语句必须为年龄字段返回整数 21,那么 get 方法的实现应该是什么? [注意:21将以整数形式返回]

ObjectUtils.get(person, "age");

示例方法 header

public static <E> E get(Object object, String fieldName);

一种方法是获取字段的类型并显式进行类型转换。

另一种方法是使用 BeanUtils 类(Apache 公共(public)库)中的 getProperty 方法。但是,限制是它仅返回字符串,而不返回强类型值。

是否有更好的方法或库实用程序可以实现此目的?

最佳答案

以下实现达到了目的。

@SuppressWarnings("unchecked")
public static <E> E get(Object object, String fieldName) {
    Class<?> clazz = object.getClass();
    while (clazz != null) {
        try {
            Field field = clazz.getDeclaredField(fieldName);
            field.setAccessible(true);
            return (E) field.get(object);
        } catch (NoSuchFieldException e) {
            clazz = clazz.getSuperclass();
        } catch (Exception e) {
            return null;
        }
    }
    return null;
}

关于java - 从Java中的对象获取强类型属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16711341/

相关文章:

php - 确定变量是否是 PHP 中的有效闭包

java - field.get 和对象实例名称

C# 通过反射获取属性

java - 使用 Apache POI 在 java 中编辑 Microsoft-office .doc 文件

java - NoSuchMethodError : String. isEmpty

java.lang.NoClassDefFoundError : org/apache/commons/lang/StringUtils when deploying web application

java - 添加到 Map 时如何将 double 组装箱为 double 组?

iphone - 核心数据: Merging multiple Managed Object Contexts and deleting objects

java - "better"是使用泛型(?)、对象还是分离类?

c# - 使用反射从程序集加载时的不同类型