获取Java类中的通用字段的类型

时间:2012-06-12 23:05:56

标签: java generics reflection

class A<Type>{

    private Type id;

}

class B extends A<String>{


}

B b = new B();
Field idField = //reflection code to get id field

如何从“idField”中获取idField的确切类型,意味着String而不是Type?

1 个答案:

答案 0 :(得分:1)

我不确定你想要实现的目标。 但我猜你想确定字段'id'的具体类型。

    public class A<T>{
    public T id;
    public Class<T> idType;

    public A(){
        idType = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }
}

public class B extends A<String>{

}

public static void main(String[] args) throws Exception {
    B b = new B();
    System.out.println(b.idType);
}

上面代码片段中的最后一个sysout语句将打印'java.lang.String'。

这是在基类中编写通用功能时非常常用的技术。