Java 获取实际通用参数

Java get actual generic parameters

我正在使用 java 7。在尝试提取派生的实际通用参数时 class 我使用以下代码:

Class<E> cls = (Class<E>) ((ParameterizedType)   
                  getClass().getGenericSuperclass())
                            .getActualTypeArguments()[0];

它通常运行良好,但如果我有多重继承的情况( C extends B extends A )并且 B 也是抽象的(尚未声明实际的通用参数)我递归地得到 class在基础方法 (B) 之前并在 B 上使用此方法(而不是 getClass())[因为如果我在 C 上使用它,它的 superclass 将不是参数化类型],以及实际类型参数显示通用类型(我使用它得到 T)。

如果有人遇到此问题,我将不胜感激任何帮助或指南。

您的问题可能是泛型是不变的。正如你所说,它通常运作良好,但继承 - 你有麻烦了......
对于任何两个不同的类型 A 和 B,Class<A> 既不是子类型也不是 Class<B> [JLS, 4.10].

的超类型

要解析具有多重继承的类型参数,最好的办法是使用类似 TypeTools.

的东西
class A<T> {}
class B<T> extends A<T> {}
class C extends B<String> {}

// Resolve the type argument for A using type information from C
Class<?> t = TypeResolver.resolveRawArgument(A.class, C.class);
assert t == String.class;