Обёртка (тип данных)

Поделись знанием:
Перейти к: навигация, поиск

В объектно-ориентированном программировании обёртка над необъектным типом (boxed type) — объектный тип данных, призванный хранить значение необъектного типа. Например, в Java класс Integer является надстройкой для примитивного типа int.



Для чего?

  • Чтобы работала динамическая идентификация типа. Например, API отражения должен вызывать функции с произвольными наборами параметров, а подходит этот параметр или нет — определяется динамически. Точно так же действует java.util.Formatter (аналог printf из Си).
  • Чтобы превратить тип-значение в тип-ссылку (например, для передачи в функцию параметра по ссылке).
  • Как законное место для констант и функций-утилит, связанных с этим типом. Например, в java.lang.Integer есть константы MIN_VALUE и MAX_VALUE; функции, определяющие знак числа, переводящие число в десятичный и шестнадцатеричный вид, и т. д.
  • Чтобы работали шаблоны обобщённого программирования, которые из-за ограничений Java-машины могут работать только с объектными типами. ArrayList<int> писать нельзя, а ArrayList<Integer> — можно.

Автооборачивание (автобоксинг) и авторазворачивание

Во многих языках обёртки включены в синтаксис языка. Тогда, если функции требуется Integer или Object, она автоматически «завернёт» число в тип-обёртку. Например, в Java код

void someFunc(Object x) {}

someFunc(4);

эквивалентен коду

someFunc(Integer.valueOf(4));

Это и есть автооборачивание. Аналогично, авторазворачивание действует в коде

int x = 1 + Integer.valueOf(2);

Здесь тип Integer разворачивается обратно в int.

И в Java, и в C# Object не разворачивается обратно в int: так, следующий код приведёт к ошибке

Object x = Integer.valueOf(2);
int y = x;   // ошибка приведения типа

Напишите отзыв о статье "Обёртка (тип данных)"

Отрывок, характеризующий Обёртка (тип данных)

– Это твоя сабля? – спросил Петя, – или это ваша? – с подобострастным уважением обратился он к усатому, черному Денисову.
Ростов поспешно обулся, надел халат и вышел. Наташа надела один сапог с шпорой и влезала в другой. Соня кружилась и только что хотела раздуть платье и присесть, когда он вышел. Обе были в одинаковых, новеньких, голубых платьях – свежие, румяные, веселые. Соня убежала, а Наташа, взяв брата под руку, повела его в диванную, и у них начался разговор. Они не успевали спрашивать друг друга и отвечать на вопросы о тысячах мелочей, которые могли интересовать только их одних. Наташа смеялась при всяком слове, которое он говорил и которое она говорила, не потому, чтобы было смешно то, что они говорили, но потому, что ей было весело и она не в силах была удерживать своей радости, выражавшейся смехом.
– Ах, как хорошо, отлично! – приговаривала она ко всему. Ростов почувствовал, как под влиянием жарких лучей любви, в первый раз через полтора года, на душе его и на лице распускалась та детская улыбка, которою он ни разу не улыбался с тех пор, как выехал из дома.
– Нет, послушай, – сказала она, – ты теперь совсем мужчина? Я ужасно рада, что ты мой брат. – Она тронула его усы. – Мне хочется знать, какие вы мужчины? Такие ли, как мы? Нет?
– Отчего Соня убежала? – спрашивал Ростов.
– Да. Это еще целая история! Как ты будешь говорить с Соней? Ты или вы?
– Как случится, – сказал Ростов.
– Говори ей вы, пожалуйста, я тебе после скажу.
– Да что же?
– Ну я теперь скажу. Ты знаешь, что Соня мой друг, такой друг, что я руку сожгу для нее. Вот посмотри. – Она засучила свой кисейный рукав и показала на своей длинной, худой и нежной ручке под плечом, гораздо выше локтя (в том месте, которое закрыто бывает и бальными платьями) красную метину.
– Это я сожгла, чтобы доказать ей любовь. Просто линейку разожгла на огне, да и прижала.
Сидя в своей прежней классной комнате, на диване с подушечками на ручках, и глядя в эти отчаянно оживленные глаза Наташи, Ростов опять вошел в тот свой семейный, детский мир, который не имел ни для кого никакого смысла, кроме как для него, но который доставлял ему одни из лучших наслаждений в жизни; и сожжение руки линейкой, для показания любви, показалось ему не бесполезно: он понимал и не удивлялся этому.