„А сега кратък урок от Диего. Кратко и по същество. За преобразуването на референтен тип.“
"Нека започнем с обектни променливи. Можете да присвоите произволен референтен тип на такава променлива ( разширяващо преобразуване ). Въпреки това, за да направите присвояването в другата посока ( стесняващо преобразуване ), трябва изрично да посочите операция за преобразуване:"
Код | Описание |
---|---|
|
Типично преобразуване на разширяване на справка |
|
Типично преобразуване на стесняваща справка |
|
Разширяване на преобразуването. |
|
Грешка по време на изпълнение! Не можете да прехвърлите препратка Integer към препратка String. |
|
Грешка по време на изпълнение! Не можете да прехвърлите препратка Integer към препратка Float. |
|
Преобразуване в същия тип. Стесняващо референтно преобразуване. |
" Разширяващото 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% сигурни за типа на обекта.“
"Схванах го."
GO TO FULL VERSION