В версии Блоха используется Class.cast()
- это реализовано как return (T) obj
, непроверенный актерский состав. Это обман в том смысле, что предупреждение компилятора о непроверенном приведении перемещено в предварительно скомпилированную библиотеку. Безопасность типов приведения защищается не компилятором, а логикой приложения.
Тебе не стоит беспокоиться и о неконтролируемых ролях. Существуют типовые отношения, которые не могут быть выражены в языке, но которые программисты знают как истинные. Так что просто отмените компилятор, скажите, что приведение безопасно.
Исправление
Мое понимание "неконтролируемого приведения" было неверным.
Class.cast()
не содержит "непроверенный актерский состав". Приведение выполняется после «проверки», если оно выполняется во время выполнения, оно гарантированно будет успешным.
T cast(Object obj)
if obj is instance of this class // check
return (T)obj; // cast
else
throw new ClassCastException