Что означает сказать тип “упаковывается”?

Я имел ту же проблему и нашел очень изящное решение для Класса Пейджера от

http://blogs.taiga.nl/martijn/2008/08/27/paging-with-aspnet-mvc/

В Вашем контроллере, на который похож вызов:

return View(partnerList.ToPagedList(currentPageIndex, pageSize));

и в Вашем представлении:

Seite: <%= Html.Pager(ViewData.Model.PageSize, ViewData.Model.PageNumber, ViewData.Model.TotalItemCount)%>

44
задан Nils von Barth 13 December 2014 в 20:26
поделиться

6 ответов

Некоторые типы данных считаются «примитивными», что означает, что они не рассматриваются как объект и не обладают свойствами объекта.

На большинстве платформ целые числа и символы являются примерами типов, которые являются примитивными, но могут быть упакованы в коробку.

Упаковка означает их обертывание в объект, чтобы они имели поведение объекта.

Точное значение и поведение зависят от языка, который вы используете. Некоторые языки (например, Smalltalk ... по крайней мере, когда я этим занимался ...) не допускают никаких примитивных типов и рассматривают все как объект, но с этим связано снижение производительности, потому что в конце днем процессор должен работать с необработанными числами и необработанной памятью, чтобы выполнять полезную работу. Если вы хотите добавить два целых числа, помещенных в рамку, например,

59
ответ дан 26 November 2019 в 21:58
поделиться

Более конкретная информация для Java:

Autoboxing позволяет Java автоматически преобразовывать такие вещи, как boolean и int , в их версии объектов Boolean и Целое число в большинстве случаев автоматически. Это также допускает обратное.

Например:

int a = 3; // no boxing is happening
Integer b = 3;  // newer versions of java automatically convert the int 3 to Integer 3
int c = b;  // these same versions also automatically convert Integer 3 to int 3

Старые версии java, в которых нет автобокса, потребуют, чтобы этот код выполнял то же самое:

int a = 3;  // works the same
Integer b = new Integer(3);  //must set up a Integer object manually
int c = b.intValue(); //must change Integer object to a primitive

Однако есть некоторые сценарии, в которых вам все еще нужно делать вещи вручную. Например, представьте, что у вас есть класс с двумя такими методами:

assertEquals(int a, int b);
assertEquals(Object a, Object b)

Теперь, если вы попытаетесь сделать это:

Integer a = 3;
int b = 3;
assertEquals(a, b);  // this will not compile

Причина, по которой это не работает, заключается в том, что он не может понять, следует ли распаковывать a в int или box b в Integer . Следовательно, неясно, какая подпись метода должна быть вызвана. Чтобы исправить это, вы можете сделать одно из следующих действий:

assertEquals((int) a, b);
assertEquals(a, (Integer) b);
18
ответ дан 26 November 2019 в 21:58
поделиться

Да, упаковка означает взятие типа значения и его перенос в ссылочный тип. Поскольку java представила автобоксинг, вы можете:

void foo(Object bar) {}
//...
    foo(1);

И java автоматически превратит int 1 в Integer. В предыдущих версиях вам нужно было сделать:

foo(new Integer(1));

Autoboxing наиболее полезен в java при работе с универсальными шаблонами, поскольку вы не можете использовать примитивы с универсальными шаблонами, поэтому для хранения целых чисел в списке вам нужно было бы создать Перечислите и поместите целые числа в поле списка.

12
ответ дан 26 November 2019 в 21:58
поделиться

Обычно, когда вы работаете с коллекциями, вы имеете дело с массивами объектов. В таких языках, как Java, есть разница между примитивом и объектом. Когда примитив «упакован в коробку», это, по сути, просто оболочка вокруг примитива, поэтому он хорошо сочетается с остальной частью инфраструктуры, ожидающей объект.

Автобоксирование - это просто действие помещения примитива в объект или извлечения примитива из объекта прозрачно, поэтому вам не придется беспокоиться о дополнительном шаге, который придется сделать самому.

1
ответ дан 26 November 2019 в 21:58
поделиться

Тип в штучной упаковке означает, что значения выделяются в блоке в куче и на них ссылаются через указатель. Это хорошо для единообразия в реализации среды выполнения (упрощает использование общих функций и т. Д.) За счет дополнительной косвенности.

3
ответ дан 26 November 2019 в 21:58
поделиться

Рамка означает, что они взяли обычный тип значения и создали вокруг него объект. Вроде как положить в коробку. Обычно этого следует избегать из-за накладных расходов на создание объекта.

1
ответ дан 26 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: