首页 > Java > java教程 > 如何使用反射检索 Java `List` 的通用类型?

如何使用反射检索 Java `List` 的通用类型?

Linda Hamilton
发布: 2024-12-23 13:08:18
原创
760 人浏览过

How to Retrieve the Generic Type of a Java `List` Using Reflection?

检索 Java.util.List 的泛型类型

在 Java 中,泛型类型参数允许对类或接口进行操作不同类型的数据。例如,List 可以存储任何类型的元素。要访问 List 的泛型类型,可以使用 Java Reflection。

使用反射获取泛型类型

Field 类的 getGenericType() 方法返回字段的通用类型。对于列表字段,这是一个 ParameterizedType。要提取实际的泛型类型,请将 ParameterizedType 转换为列表的类型。

以下代码演示了如何使用反射检索 List 的泛型类型:

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;

public class GetGenericType {

    List<String> stringList = new ArrayList<>();
    List<Integer> integerList = new ArrayList<>();

    public static void main(String[] args) throws Exception {
        Class<GetGenericType> clazz = GetGenericType.class;

        Field stringListField = clazz.getDeclaredField("stringList");
        ParameterizedType stringListType = (ParameterizedType) stringListField.getGenericType();
        Class<?> stringListClass = stringListType.getActualTypeArguments()[0];
        System.out.println(stringListClass); // class java.lang.String

        Field integerListField = clazz.getDeclaredField("integerList");
        ParameterizedType integerListType = (ParameterizedType) integerListField.getGenericType();
        Class<?> integerListClass = integerListType.getActualTypeArguments()[0];
        System.out.println(integerListClass); // class java.lang.Integer
    }
}
登录后复制

在此例如,getGenericType()方法用于检索stringList和integerList字段的通用类型,它们是ParameterizedType的实例。访问这些类型的 getActualTypeArguments() 方法会返回实际的泛型类型,它们分别打印为 String 和 Integer。

需要注意的是,反射可能会很昂贵,并且只应在必要时使用。在代码上下文中,如果 stringList 和 integerList 的泛型类型已知或可以在当前作用域中推断出,则无需使用反射。但是,在处理动态创建或编译时未知的泛型类型时,反射可能很有用。

以上是如何使用反射检索 Java `List` 的通用类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板