我有以下类层次结构:
public abstract class NumberRangeParameter<T extends Comparable<T>>
extends ComplexParameter{
private T lower;
public void setLower(T lower) {
this.lower = lower;
}
}
public class IntegerRangeParameter extends NumberRangeParameter<BigInteger> {}
现在,如果我运行它(irp
是IntegerRangeParameter
的实例):
Method[] methods = irp.getClass().getMethods();
for (Method m : methods) {
Class<?>[] parameterTypes = m.getParameterTypes();
}
如果我在调试器上执行此代码并评估parameterTypes
我得到[interface java.lang.Comparable]
,但我原以为它是BigInteger ...
有人可以解释为什么会这样吗?
答案 0 :(得分:2)
由于需要向后兼容,您遇到了使用Java泛型时固有的Type Erasure问题。通用参数主要用于编译时类型检查,并且在运行时信息丢失(大部分)。请查看提供的链接以获取更多信息。
编辑1
另请查看类似的SO主题:get-type-of-a-generic-parameter-in-java-with-reflection