Получение неожиданного типа параметра при вызове Method.getParameterTypes () - PullRequest
1 голос
/ 20 августа 2011

У меня есть следующая иерархия классов:

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 ...

Может кто-нибудь объяснить, почему это происходит?

1 Ответ

2 голосов
/ 20 августа 2011

Вы сталкиваетесь с проблемой Type Erasure , которая присуща при использовании обобщений Java из-за требования обратной совместимости.Общие параметры в основном присутствуют для проверки типов во время компиляции , и информация теряется (по большей части) во время выполнения.Пожалуйста, проверьте ссылку, предоставленную для более.

Редактировать 1
Также, пожалуйста, проверьте этот аналогичный поток SO: get-type-a-generic-параметрв-Java-с-отражения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...