Пожалуйста, помогите мне обернуть мою голову вокруг, почему это не работает. (Это не является практической проблемой, это психическое Excercise для OCPJP экзамена.)Java: авто-unboxing в сочетании с отливкой
public class ImplicitConversions {
Integer iBoxed;
short sPrimitive = (short)iBoxed;
}
// ошибка компилятора: несовместимые типы; требуется: short, found: Integer
Я предполагаю, что компилятор пытается выполнить первый раз (или раньше) unboxing, тогда как, например, арифметическая операция (iBoxed + iBoxed) сначала распаковывает ее. Поэтому можно ли с уверенностью сказать, что авто-бокс/распаковка занимает свое место в порядке операций (Unary, Arithmetic, Relational, Logical, Conditional, Assignment) и где именно?
Я читал о преобразовании конверсии в источнике ниже (чтобы убедиться, что я совместим с 1.6), но это ускользает от меня. Благодарю. http://docs.oracle.com/javase/specs/jls/se5.0/html/conversions.html#20232
Вы выбрасываете в префицирующий тип данных, это недопустимо –
@MuhammadRamahy Как это должно работать? Нет отношения наследования между «Integer» и «Short». 'short sPrimitive = (Short) iBoxed;' даже не будет компилироваться, а в то время как 'short sPrimitive = (Short) (Object) iBoxed;' компилируется, это бесполезно, что проверка типа компилятора была обойдена. Будет выбрано исключение времени выполнения. – 5gon12eder
Вы правы. Я не знаю, почему я так сказал. –