Java反射获取对象中集合字段上的泛型对象

public class Demo {

    private List<Person> arrs;

    public static void main(String[] args) throws Exception {
        Field arr = Demo.class.getDeclaredField("arrs");
        arr.setAccessible(true);
        System.out.println(getActualTypeArgument(arr).getClass().getSimpleName());
    }

/**
 * 获取对象中集合字段的泛型
 * @param field field是List<T>类型
 * @return 此方法获取T类型的对象
 * @throws IllegalAccessException
 * @throws InstantiationException
 */
    public static Object getActualTypeArgument(Field field) throws IllegalAccessException, InstantiationException {
        Class<?> curFieldType = field.getType();
        // 集合List元素
        if (curFieldType.equals(List.class)) {
            // 当前集合的泛型类型
            Type genericType = field.getGenericType();
            if (genericType instanceof ParameterizedType) {
                ParameterizedType pt = (ParameterizedType) genericType;
                // 得到泛型里的class类型对象
                Class<?> actualTypeArgument = (Class<?>) pt.getActualTypeArguments()[0];
                return actualTypeArgument.newInstance();
            }
        }
        return null;
    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值