[Документация Yandex Cloud](../../../../index.md) > [Yandex Cloud Functions](../../../index.md) > [Разработка на Java](../index.md) > Модель программирования > Обзор

# Модель программирования на языке Java

Сервис Cloud Functions предоставляет четыре модели программирования на языке Java — с помощью интерфейсов [Function](jdk-function.md) и [YcFunction](yc-function.md), класса [HttpServlet](servlet-api.md), а также [Spring Boot](spring-boot.md). Первые три способа задания обработчика функций подразумевают написание своих реализаций данных интерфейсов или классов, а последний — загрузку приложения в исходном виде без каких-либо изменений.

Разница между моделями [Function](jdk-function.md) и [YcFunction](yc-function.md) состоит в наличии [контекста вызова](../context.md). Если, например, нужно взаимодействовать с сервисами Yandex Cloud при помощи [SDK](../sdk.md), то рекомендуем выбрать [YcFunction](yc-function.md). А модель использования класса [HttpServlet](servlet-api.md) позволяет получить полный контроль над возвращаемым значением и `HTTP`-методом, с помощью которого была вызвана функция, а также, как и модель `YcFunction`, дает доступ к [контексту вызова](../context.md).

Для моделей [Function](jdk-function.md) и [YcFunction](yc-function.md) есть два обособленных типа: `byte[]` и `String`. Работа с ними отличается от работы с другими типами. При их использовании в качестве типа аргумента функции-обработчика среда выполнения не будет преобразовывать входящий запрос в `JSON`-интерпретацию для этих типов, а передаст его напрямую в пользовательскую функцию-обработчик. Исключением являются случаи, когда используется параметр [?integration=raw](../../../concepts/function-invoke.md#http).

{% note info %}

В качестве библиотеки для сериализации и десериализации из `JSON` используется [jsoniter](http://jsoniter.com/java-features.html).

{% endnote %}

## Требования к обработчику {#requirements}

Вне зависимости от выбранной модели загрузка проекта осуществляется одним из способов: в виде исходного кода, JAR-архива или Maven-проекта. Также на класс, содержащий функцию-обработчик, применяются следующие требования:

* Он должен быть публичным.
* У класса должен быть публичный конструктор без аргументов.

   По умолчанию он есть. Но если вы создали свой конструктор, принимающий аргументы, создайте также конструктор, не принимающий никаких аргументов.

* Он не должен быть [обобщенным](https://docs.oracle.com/javase/8/docs/technotes/guides/language/generics.html).