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;
我正在使用 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;