Из эффективного Java Second Edition, пункт 28: "Не используйте типы подстановочных знаков в качестве типов возврата. Вместо того, чтобы предоставлять дополнительную гибкость для ваших пользователей, это заставит их использовать подстановочные типы в клиентском коде".
public final Class<? super T> getRawType()
Я только что столкнулся с универсальными подстановочными знаками, чтобы понять последнее предупреждение без предупреждения, которое у меня есть в куске кода, который я пишу, и я не понимаю, почему getRawType() возвращает тип подстановочного знака.
class Base<T>{}
class Child<T> extends Base<T>{}
public <C> void test (TypeToken<? extends Base<C>> token) {
Class<? extends Base<C>> rawType = (Class<? extends Base<C>>) token.getRawType();
}
Мне нужно отправить token.getRawType(), поскольку он возвращает
Class<? super ? extends Base<C>>