android — Почему необходимо использовать @ + id вместо @id?" />

Почему необходимо использовать @ + id вместо @id?

Я знаю разницу между @+id и @id (см. этот принятый ответ ). Однако у меня всегда возникает чувство, что я выполняю работу компилятора AAPT, когда пишу «+» в @+id.

Существует ли причина, по которой компилятор ресурсов не может самостоятельно определить, должен ли идентификатор быть создан или просто использован повторно? Основная структура хеш-таблицы будет выполнять свою работу: каждый ресурс с одинаковым идентификатором входит в один и тот же ведро, и если ключ не существует, просто создайте его.

8 голосов | спросил Aurélien Ribon 23 +04002013-10-23T17:12:50+04:00312013bEurope/MoscowWed, 23 Oct 2013 17:12:50 +0400 2013, 17:12:50

3 ответа


0

Вероятно, компилятор не сможет различить «правильный» и «неправильный» идентификатор. Если он находит новый идентификатор (то есть тот, которого нет в базовой хеш-таблице), он всегда будет считать его правильным новым идентификатором. Он не сможет провести различие между фактическим новым идентификатором и опечаткой.

ответил Piovezan 23 +04002013-10-23T17:22:32+04:00312013bEurope/MoscowWed, 23 Oct 2013 17:22:32 +0400 2013, 17:22:32
0

Я мог представить, что это поможет программисту.

Если вам не нужна конструкция @ + id, тогда все ссылки /конструкции @id будут действительны, тогда будет трудно отследить ошибку, так как компилятор не потерпит неудачу при неправильных ссылках (так как он просто создаст опечатка).

Другими словами, все ошибки ссылок на идентификаторы должны быть обнаружены во время выполнения.

Edit:

Только что заметил аналогичный ответ Пиовезана относительно вашего комментария:

Maybe, but the result is that many devs use @+id everywhere, since there is no error if the id is already defined, and everything works just fine. That means the compiler tests if the id already exist, but not if it does not exist, that's crazy

Тогда эти разработчики неправильно используют конструкцию @ + id imo.

Еще лучше иметь возможность различать @ + id и @id, поскольку (для тех, кто не использует @ + id неправильно), компилятор может выдать ошибку времени компиляции по неправильным ссылкам.

Edit2

И чтобы ответить на комментарий:

That's the link I gave in the first sentence. It explains the difference but does not answer why the '+' cannot be automatically infered by AAPT

Я верю, что это возможно, но это не так из-за приведенной выше аргументации (я верю).

ответил cYrixmorten 23 +04002013-10-23T17:58:08+04:00312013bEurope/MoscowWed, 23 Oct 2013 17:58:08 +0400 2013, 17:58:08
0

с @ + id вы добавляете id в R.java, который позволяет вам ссылаться на него из классов Java, а с @id - нет. Вы можете использовать @id, только если конкретный идентификатор уже создан, и вы ссылаетесь на него в другом представлении, например, android:layout_below="@id/some_id"

ответил kjurkovic 23 +04002013-10-23T17:16:59+04:00312013bEurope/MoscowWed, 23 Oct 2013 17:16:59 +0400 2013, 17:16:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132