检查字段类型是否与java中的泛型类型相同

时间:2010-05-03 14:05:38

标签: java generics reflection

我想确定是否将字段键入为泛型类型的子类。

例如

Foo extends Bar<Foo>

Foo x;

如何判断字段x是否为Bar<Foo>的子类型?

1 个答案:

答案 0 :(得分:4)

Type genericSuperclass = x.getClass().getGenericSuperclass();
if (genericSuperclass instanceof ParameterizedType) {
    Type[] types = 
       ((ParameterizedType) genericSuperclass).getActualTypeArguments();
}

然后,您可以Class.isAssignableFrom使用type instanceof Class来验证它是否为Foo

即。

if (types[0] instanceof Class) {
    if (x.getClass().isAssignebleFrom(((Class) type[0]))){
        // do something
    }
}