Рассмотрим этот пример:Отливка ограничена подстановочные к неограниченной подстановки в пределах общего типа ошибка (Х <У <? extends T>> к X <Y<?>>
private <T> void m(Class<? extends T> k, Set<Class<? extends T>> sk) {
Class<?> ku = k;
Set<Class<?>> sku = sk; // <-- Type mismatch: cannot convert from
// Set<Class<? extends T>> to Set<Class<?>>
}
Другими словами, можно назначить Class<? extends T>
к Class<?>
для некоторые произвольные T
но не Set<Class<? extends T>>
к Set<Class<?>>
.
Это, вероятно, что-то делать с некоторым ограничением на ковариационной/контрвариации, но что?
Я мог бы ввести актерский состав: Class.class::cast
сделал бы это. Но есть ли способ скомбинировать компилятор с моей волей с тонким типом-фу, а не избивать его в голове с помощью броска?
[вложенными подстановочные] (http://bayou.io/draft/Capturing_Wildcards.html#Nested_Wildcards) – ZhongYu
@Sotirios - теперь, когда я знаю [ответа] (http://stackoverflow.com/a/ 32959018/7515790) Я вижу, что это дубликат, но тогда я этого не знал, и это не является очевидным совпадением с этим вопросом, поскольку он опускает что-либо о вложенных подстановочных знаках, что, похоже, делает его другим. – davidbak