使用反射获取字段的通用类型

迈克尔·朗汉默(Michael Langhammer)

有没有一种方法可以获取Java中字段的通用类型?

我有以下对象变量:

protected ScheduleView<WantedClass> scheduleLine1;
protected ScheduleView<SomeOtherClass> scheduleLine2;

现在,我尝试使用反射来获取ScheduleView具有WantedClass普通类型的类型的所有对象变量

Arrays.asList(this.getClass().getDeclaredFields()).stream().map(field -> {
    ScheduleView<WantedClass> retValue = null;

    System.out.println(field.getGenericType()); // prints control.ScheduleView<dto.WantedClass>

    try {
        if (field.getType() == ScheduleView.class) { // here I also want to check if the generic type is WantedClass
            retValue = (ScheduleView<WantedClass>) field.get(this);
        } else {
            retValue = null;
        }
    } catch (IllegalAccessException e) {
        retValue = null;
    } finally {
        return retValue;
    }
}).filter(scheduleView -> scheduleView != null).forEach(scheduleView -> {
        /* some more code */
});

问题是我还想检查if-Statement的泛型类型是否为WantedClass我也尝试使用该方法,getGenericType()但似乎无法实现以下目的:

field.getGenericType() == ScheduleView<WantedClass>.class

那么,有没有一种方法可以获取字段的通用类型呢?

安迪·特纳(Andy Turner)

您必须检查该字段是否为ParameterizedType,然后检查的内容getActualTypeArguments,例如

    for (Field field : Ideone.class.getDeclaredFields()) {
        Type type = field.getGenericType();
        if (type instanceof ParameterizedType) {
            ParameterizedType ptype = (ParameterizedType) type;
            if (ptype.getRawType() == ScheduledView.class) {
                if (ptype.getActualTypeArguments().length == 1
                    && ptype.getActualTypeArguments()[0] == WantedClass.class) {
                  // Do whatever with the field.
                  System.out.println(field.getName());
                }
            }
        }
    }

Ideone demo

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Java反射获取字段信息

来自分类Dev

如何使用反射获取字段值?

来自分类Dev

使用通用类型对象的反射获取属性

来自分类Dev

使用反射获取字段的值时获取异常

来自分类Dev

PHP在Hack中使用反射获取通用类型

来自分类Dev

飞镖,如何使用反射获取方法参数的通用类型?

来自分类Dev

如何使用反射获取特定类型的通用列表

来自分类Dev

PHP在Hack中使用反射来获取通用类型

来自分类Dev

Java反射:获取字段类

来自分类Dev

Java反射-获取字段值

来自分类Dev

使用反射获取所有Integer数据类型字段

来自分类Dev

使用 Scala 反射从对象中获取原始字段的类型

来自分类Dev

通过反射获取通用类型的超级接口

来自分类Dev

使用打字稿获取字段类型而不创建实例

来自分类Dev

通过反射休眠无法获取字段值

来自分类Dev

如何通过反射获取字段的包名?

来自分类Dev

如何在Java反射中获取字段值

来自分类Dev

使用反射获取通用词典<,>的键值

来自分类Dev

使用反射获取通用词典<,>的键值

来自分类Dev

从VHDL记录类型获取字段的属性

来自分类Dev

如何获取字段类型和值?

来自分类Dev

Odoo:按名称获取字段类型

来自分类Dev

使用Kotlin中的泛型类型的反射来获取静态字段的值

来自分类Dev

使用反射从PropertyType获取字节数

来自分类Dev

如何根据字段类型获取字段名称?

来自分类Dev

使用反射获取结构字段的名称

来自分类Dev

使用反射,获取对象的父类/字段

来自分类Dev

使用反射获取C#字段的值

来自分类Dev

使用反射获取内部类字段值