Почему это вызывает ошибку компиляции:
public <S super T> void addImplements(Class<S> cl)
тогда как это нормально:
public <S extends T> void addImplementedBy(Class<S> cl)
T
— это параметр типа, указанный в классе. Сообщение об ошибке на первом Syntax error on token "super", , expected
обновить
Это, видимо, нормально:
public void addImplements(Class<? super T> cl)
По сути то же самое, но без именованного типа S
.
Почему первый вариант не разрешен или не поддерживается? Казалось бы, технически поддерживать его вполне возможно. Так это недопустимо по дизайну или просто не поддерживается (пока)?
Я не получаю «ничего вам не покупает» из связанного дубликата ответа. Во-первых, он покупает мне именованный тип S
, который я могу использовать. Второй вариант (? super T
) этого не предлагает.
Примечание одинаково для Java7 и Java8
S
- person geert3   schedule 11.10.2015