【问题标题】:Class instance of generics type T BUT which extends a super class with generics泛型类型 T BUT 的类实例,它扩展了具有泛型的超类
【发布时间】:2014-09-11 13:10:42
【问题描述】:

我已经使用this method 来检索我的泛型类型,没问题... 直到现在
现在,我有了这种结构:

public class Toto<T> extends OtherOne<X,Y,Z> {...}`

当我使用

((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];`

它返回给我的类型是我的 OtherOne 类的 Class&lt;X&gt;,而不是 Class&lt;T&gt;

有人遇到过这个问题吗?无论我尝试过什么都没有用,我不想使用this solution 获取类作为我的构造函数的参数。

【问题讨论】:

    标签: java generics inheritance


    【解决方案1】:

    为了了解T 是什么,必须在子类中捕获它。例如:

    public class StringToto extends Toto<String> {}
    Class<?> t = (Class<?>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    

    之所以如此,是因为类型只有在属于类型定义的一部分时才能在运行时检索。

    【讨论】:

    • 这不是我要的,请再读一遍:public class Toto extends OtherOne {...}。我有一个泛型类,它扩展了另一个泛型类
    • 不清楚您要达到什么目的 - 您是否要获得 T 的价值?
    • 是的,我需要获得 T 的类,但是在一个类上扩展了一个也有泛型的类,所以常见的 ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments() [0];没用!
    • 如果要获取T,则必须在类型定义中捕获T的实际值(例如String),例如我发布的示例中。在没有被类型定义捕获的情况下,T 的值会在运行时被删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多