Как интерфейс Parcelable Android заставляет реализующие классы иметь поле stati c? - PullRequest
1 голос
/ 06 мая 2020

Android имеет интерфейс Parcelable, который каким-то образом заставляет реализующие классы иметь поле public static CREATOR.

Из документации интерфейса:

Классы, реализующие Интерфейс Parcelable также должен иметь ненулевое поле stati c с именем CREATOR типа, реализующего интерфейс Parcelable.Creator.

Мой вопрос состоит из двух частей:

1) Как этот интерфейс заставляет реализующие классы иметь это поле stati c CREATOR? Как я могу сделать это в своих собственных интерфейсах Java? Я не могу понять, как это работает из исходного кода Parcelable.

Например: если бы у меня был интерфейс Car, и я хотел бы, чтобы каждый реализующий класс имел publi c stati c String MANUFACTURER. Можно ли это сделать аналогично полю Parcelable CREATOR? Я, конечно, могу добавить к интерфейсу метод getManufacturer(), но мне любопытно, как Parcelable заставляет поле stati c.

2) Следуя пункту 1, как Android получить доступ к этому полю? С помощью метода интерфейса вы могли бы сделать что-то вроде:

public void printManufacturer(Car car) {
    System.out.println(car.getManufacturer());
}

Как это будет работать с полем?

Я пытался исследовать, как это работает, но единственные ответы, которые я нашел это что это невозможно , но это как-то здесь делается.

1 Ответ

0 голосов
/ 06 мая 2020

Этот интерфейс не требует наличия поля на уровне языка, потому что это невозможно. Если вы не «реализуете» эту ошибку поля, вместо этого будет Android lint.

Если вам интересно, вот исходный код проверки: ParcelDetector.

Затем он использует отражение для доступа к полю stati c, поскольку он знает как имя класса, так и имя поля.

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