首页 > Java > java教程 > 如何使用反射获取 Java 中的泛型参数类型?

如何使用反射获取 Java 中的泛型参数类型?

Mary-Kate Olsen
发布: 2024-12-31 20:09:10
原创
801 人浏览过

How Can I Get Generic Parameter Types in Java Using Reflection?

使用反射在 Java 中获取泛型参数类型

在 Java 中,泛型类型是一个强大的功能,它允许更灵活和可重用的代码。然而,使用通用参数有时可能会很棘手。一个常见的挑战是在运行时确定泛型参数的实际类型。

可能吗?

是的,可以获取泛型参数的类型使用反射。反射提供了一种在运行时访问和操作有关 Java 类的结构、字段和方法的详细信息的方法。

示例:

考虑以下代码片段:

public class Voodoo {
    public static void chill(List<?> aListWithTypeSpiderMan) {
        // Here I'd like to get the Class-Object 'SpiderMan'
        Class typeOfTheList = ???;
    }

    public static void main(String... args) {
        chill(new ArrayList<SpiderMan>());
    }
}
登录后复制

在 chill 方法中,我们有一个未知类型的列表。我们想要确定实际的类型参数,在本例中应该是 SpiderMan。

解决方案:

解决方案涉及使用 ParameterizedType 接口,它是一种类型描述参数化类型的类型,例如使用泛型的类型。下面是我们如何实现它:

Class typeOfTheList = ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
登录后复制

这段代码获取当前类的超类(在本例中为 Voodoo),它应该是一个参数化类型,然后提取实际的类型参数。第一个类型参数对应于我们感兴趣的类型参数,即 SpiderMan。

注意:

Java 16 之前不完全支持此技术。早期对泛型类型使用反射被认为是 hacky,但从 Java 16 开始,getActualTypeArguments() 已添加到 Type 接口中,提供了一种更干净、更简化的方式访问通用类型信息。

以上是如何使用反射获取 Java 中的泛型参数类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

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