如何使用java反射来确定基类字段的泛型类型

时间:2018-04-12 16:01:19

标签: java reflection

我知道如果我有一个带有泛型类型参数的字段,比如这个

List<String> mList

如果我可以获得对该字段的引用,我可以使用此代码来确定泛型类型实际上是一个字符串:

((ParameterizedType field.getGenericType()).getActualTypeArguments()

然而,我的问题有点复杂。我们有一个看起来像这样的超类:

abstract class CustomList extends List<T> {
  List<T> mList;    
}

然后我们有另一个看起来像这样的类:

class FooList extends CustomList<Foo> {
  //...
}

当我尝试反思字段mList时,它告诉我那个泛型类型参数是T.有没有办法确定它实际上是Foo类型?如果我可以确定FooList类有一个通用参数Foo,那可能就足够了,但我不知道该怎么做?

1 个答案:

答案 0 :(得分:0)

实际上stackoverflow.com/questions/11164756/无法解决您的问题。

您想从List.T推断出FooList,而不是CustomList.T

您可以使用我的实用工具类GenericUtil

getGenericTypes(FooList.class, List.class); // return {Foo.class}

它不仅可以处理任何类型的通用类型。