Референтни типове преобразувания - 1

„А сега кратък урок от Диего. Кратко и по същество. За преобразуването на референтен тип.“

"Нека започнем с обектни променливи. Можете да присвоите произволен референтен тип на такава променлива ( разширяващо преобразуване ). Въпреки това, за да направите присвояването в другата посока ( стесняващо преобразуване ), трябва изрично да посочите операция за преобразуване:"

Код Описание
String s = "mom";
Object o = s; // o stores a String
Типично преобразуване на разширяване на справка
Object o = "mom"; // o stores a String
String s2 = (String) o;
Типично преобразуване на стесняваща справка
Integer i = 123; // o stores an Integer
Object o = i;
Разширяване на преобразуването.
Object o = 123; // o stores an Integer
String s2 = (String) o;
Грешка по време на изпълнение!
Не можете да прехвърлите препратка Integer към препратка String.
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
Грешка по време на изпълнение!
Не можете да прехвърлите препратка Integer към препратка Float.
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
Преобразуване в същия тип. Стесняващо референтно преобразуване.

" Разширяващото or стесняващото референтно преобразуване не променя обекта по ниHowъв начин. Стесняващата (or разширяващата) част конкретно се отнася до факта, че операцията по присвояване включва (не включва) проверка на типа на променливата и нейната нова стойност. "

„Това е редкият пример, в който всичко е ясно.

„За да избегнем грешките в тези примериимаме начин да разберем Howъв тип е посочен от променливата Object:

Код
int i = 5;
float f = 444.23f;
String s = "17";
Object o = f;                       // o stores a Float

if (o instanceof  Integer)
{
    Integer i2 = (Integer) o;
}
else if (o instanceof  Float)
{
    Float f2 = (Float) o;            // This if block will be executed
}
else if (o instanceof  String)
{
    String s2 = (String) o;
}

„Трябва да извършите тази проверка преди всяко разширяващо се преобразуване, освен ако не сте 100% сигурни за типа на обекта.“

"Схванах го."