【发布时间】:2021-02-02 06:12:06
【问题描述】:
我正在努力从对象中获取第二个泛型的类型。
抽象类有两个泛型类型 T 和 S
abstract class Concept<T, S> {
public Concept() {
//do nothing
}
public final Class<?> getTypeParam() {
ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();
Class<?> result = (Class<?>) parameterizedType.getActualTypeArguments()[0];
return result;
}
}
在这个派生类中,定义了一个(在这种情况下为 T)泛型:
public class Decision<S> extends Concept<String, S>{
public Decision () {
super();
System.out.println(getTypeParam()); //returns the first parameterized type. How do I get the second one?
}
}
当我现在运行它时,我得到了第一个 parmerized 泛型。伟大的。但是我如何取出第二个呢?
public class Main {
public static void main(String[] args){
Decision<Boolean> myBooleanDecision = new Decision<>();
}
}
【问题讨论】:
-
(Class<?>) parameterizedType.getActualTypeArguments()[1];? -
切勿将此类信息放入 cmets。请务必更新您的问题。这里没有人想破译来自 cmets 的堆栈跟踪...
-
注意:Decision 类中会抛出异常。该类只有 1 个通用参数,因此您不能要求 second。例如,您应该修改您的方法以返回一个类列表,然后返回一个列表。
-
最后:了解如何使用数组是基本的java。检查泛型类型......是非常先进的东西。看来您在基本的东西上遇到了麻烦……所以我认真地建议:暂时忘记高级的东西。首先学习基础知识。如果您不明白为什么您的代码会抛出该异常,那么这些高级主题将不适合您。
-
@GhostCat:我认为您在这里的第二条评论可以作为答案。它描述了问题并提出了解决方案......
标签: java generics reflection parameterized-types