Напомним: все типы данных Java делятся на ссылочные (например, Byte, Integer, Object, List) и примитивные (простые) типы (например, int, double, byte, char). Но обобщенные параметры (например, T в описании типа Function) допустимы только для ссылочных типов. Причина этого лежит во внутренней реализации обобщенных типов12. В результате в Java существует механизм преобразования примитивных типов данных в соответствующие ссылочные типы. Этот механизм называется упаковкой (boxing). Обратный процесс (преобразование ссылочного типа данных в соответствующий примитивный тип) называется распаковкой (unboxing). В Java существует также механизм автоупаковки (autoboxing)