Вместо того, чтобы бороться с языковой функцией, вы должны научиться правильно ее использовать.
Вместо того, чтобы спрашивать, как использовать небезопасные приведения для обхода ошибки, полезно сначала понять почему есть ошибка; почему то, что вы просите сделать, небезопасно (потому что вы можете добавить A
в список, используя listA
, а затем вывести его из списка как B
, используя listB
).
Затем вы должны объяснить , почему вы считаете, что ваш вариант использования не соответствует небезопасному сценарию.Потому что ответ на это даст подсказку о том, как изменить ваш код, чтобы он корректно работал с универсальными шаблонами.
- Если вы скажете, что это небезопасно, потому что вы никогда не добавляете ничего, используя
listA
,тогда вы должны изменить тип listA
на List<? extends A>
.Таким образом, вы можете назначить listB
ему напрямую без каких-либо преобразований, и вы не сможете ничего добавить к нему, используя listA
(кроме null
). - Если вы скажете, что этоне является небезопасным, потому что вы никогда ничего не получите, используя
listB
, тогда почему бы не изменить тип listB
на List<A>
в первую очередь?