Почему класс R не содержит тип поля? - PullRequest
0 голосов
/ 31 октября 2018

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

Раньше нам приходилось кастовать его локально

(RelativeLayout) findViewById(R.id.my_relative_layout_view)

Теперь мы используем дженерики

findViewById<RelativeLayout>(R.id.my_relative_layout_view)

мой вопрос: почему компилятор (или тот, кто генерирует класс R) также не сохраняет какую-то ссылку на тип элемента (не имеет значения, является ли он строкой, целым или любым другим другой тип), поэтому проблемы с кастингом не должны возникать

1 Ответ

0 голосов
/ 31 октября 2018

Мы не можем спекулировать на этом, это был бы выбор дизайна.

Возможно, , что они хотят избежать вздутия APK. Каждому идентификатору потребуется полное имя пакета для класса. Так бы каждый ID в android.R тоже. Так как R упакован в каждом APK.

Решения

Однако, если вы используете Kotlin, вы можете даже отказаться от проверки дженериков. Котлин определит это автоматически.

val view = findViewById(R.id.my_relative_layout_view)
view.method()

Или событие проще, если вы используете синтетику:

my_relative_layout_view.method()

Кроме того, если вы используете привязки данных, вы можете просто получить к ним доступ следующим образом:

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