Почему поле помечено сериализованными именами? - PullRequest
0 голосов
/ 12 декабря 2018

В пейджинговой кодовой метке есть этот фрагмент кода:

/**
 * Immutable model class for a Github repo that holds all the information about a repository.
 * Objects of this type are received from the Github API, therefore all the fields are annotated
 * with the serialized name.
 * This class also defines the Room repos table, where the repo [id] is the primary key.
 */
@Entity(tableName = "repos")
data class Repo(
        @PrimaryKey @field:SerializedName("id") val id: Long,
        @field:SerializedName("name") val name: String,
        @field:SerializedName("full_name") val fullName: String,
        @field:SerializedName("description") val description: String?,
        @field:SerializedName("html_url") val url: String,
        @field:SerializedName("stargazers_count") val stars: Int,
        @field:SerializedName("forks_count") val forks: Int,
        @field:SerializedName("language") val language: String?
)

Зачем нужны все эти аннотации?Что они делают?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Представьте себе эту запись в базе данных:

id: 21434366,
name: "John",
full_name: "John Doe",
number_of_github_repository: 4

Ключи каждого поля указаны в нижнем регистре, в формате подчеркивания.Однако общее соглашение об именовании полей / переменных основано на случае верблюда.

Вместо того, чтобы использовать само имя поля в качестве имени переменной

val number_of_github_repository: Int 

Мы все предпочитаем это

val numOfGithubRepos: Int

Именно здесь вступает в действие аннотация @field: SerializedName,Если вы аннотируете имя переменной с помощью фактического имени поля базы данных, программа найдет значение из аннотированного имени и присвоит его настраиваемому имени переменной.

Например,

@field:SerializedName("number_of_github_repositories") val numOfGithubRepos: Int 

Это будет искать значение в поле вашей базы данных "number_of_github_repositories" и присваивать его переменной numOfGithubRepos.

То же самое относится и к библиотеке GSON.Он преобразует нежелательные / неорганизованные имена полей в ваши предпочтительные имена переменных.По умолчанию библиотека GSON пытается найти поле из ответа Json, которое соответствует объявленному имени переменной.Поэтому, если вы только что объявили поле без аннотации, например,

val numOfGithubRepos: Int 

, и если фактический объект Json был

{num_of_github_repositories: 4}

, он выдаст исключение, поскольку такого поля симя numOfGithubRepos в ответе Json.

0 голосов
/ 12 декабря 2018

Они приходят от API в форме JSON.Json имеет структуру ключ-значение, где у вас есть имя и значение, поэтому аннотация указывает, какой ключ вы ищете, а затем возвращается значение, в данном случае long, строки и целые числа.Я надеюсь, что я был достаточно ясен.=) * * Тысяча одна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...