【发布时间】:2015-02-27 05:23:59
【问题描述】:
我使用的是 java 7。在尝试提取派生类的实际泛型参数时,我使用以下代码:
Class<E> cls = (Class<E>) ((ParameterizedType)
getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
它通常工作得很好,但是如果我有多重继承的情况( C extends B extends A )并且 B 也是抽象的(尚未声明实际的泛型参数)我递归地在基类之前获取类(B ) 并在 B 上使用此方法(而不是 getClass())[因为如果我在 C 上使用它,它的超类将不是参数化类型],并且实际的类型参数向我展示了泛型类型(我得到 T 使用这个)。
如果有人遇到这种情况,我将不胜感激任何帮助或指导。
【问题讨论】:
-
为什么要提取派生类的实际泛型参数?
-
注意'C extends B extends A'不是多重继承,即'C extends B and A'
-
是的,它不是多重继承(在 java 7 中不存在),这就是我在括号中添加解释的原因。我的整个案例是一个派生许多类的基类,我想对所有这些类中的实际泛型做一个动作..但有些类不是直接从那个类派生的(中间有那个 B 类)在这种情况下,实际参数的提取会检索 T 而不是实际参数。
-
到底是什么问题?
-
问题是如何在类的方法中获取泛型的实际类型,该类的子类型具有子类型,并且泛型的声明仅在最子类型的类中。跨度>
标签: java generics parameters