【问题标题】:How to do use java reflection to determine generic type of base class field [duplicate]如何使用java反射来确定基类字段的泛型类型[重复]
【发布时间】:2018-04-13 22:53:15
【问题描述】:

我知道如果我有一个带有诸如此类的泛型类型参数的字段

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,那可能就足够了,但我也不知道该怎么做?

【问题讨论】:

  • 您的代码似乎无法编译,但请检查fasterxml classmate
  • @zlakad。谢谢。我会看一下那个帖子——它似乎确实解决了这个问题。之前看的时候没找到。如果您将其发布为答案,我可以将其标记为已接受。再次感谢
  • @MenachemSchachter 不客气。我真的不在乎声誉所以就这样吧。也谢谢你……祝你好运,朋友。

标签: java reflection


【解决方案1】:

事实上 stackoverflow.com/questions/11164756/ 并不能解决您的问题。

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

你可以使用我的实用类GenericUtil

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

它可以处理任何类型的泛型,而不仅仅是类类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2020-09-02
    • 2019-07-23
    • 2020-05-11
    相关资源
    最近更新 更多