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