У меня есть следующие иерархии классов:Получение неожиданного типа параметра при вызове Method.getParameterTypes()
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 ...
Может кто-нибудь объяснить, почему это происходит?
Спасибо, я понял, что это было что-то делать с этим, Java дженериков еще озадачить меня иногда. Кстати, мне интересно, какую ошибку я получу, если я вызову метод с подклассом 'Comparable', но не' BigInteger'. – guardianpt
Вероятно, вы не увидите ошибок времени компиляции (один из рисков использования отражения с помощью генериков), но, скорее всего, получите исключение класса при запуске. –