Подтвердить что ты не робот

Setter и Getter. В Android. Накладные расходы на производительность?

Когда я изучал стандартную версию Java, функции getter и setter часто использовались для скрытия переменных и сокращения прямого доступа к ним. Мне рассказали несколько источников, что в Android вы не должны использовать эти функции и напрямую изменять только переменные. Причина в том, что потери производительности из-за накладных расходов при использовании геттеров и сеттеров используются в Android. Результирующее использование памяти и замедление работы системы.

Есть ли в этом правда? и если есть, то почему потери производительности для использования getter и setter?

4b9b3361

Ответ 1

В соответствии с найденной документацией здесь использование геттера и сеттера - плохая идея в android. Как говорится,

Это плохая идея для Android. Виртуальные вызовы методов дороги, гораздо больше, чем поиск полей экземпляров. Разумно следовать общие методы объектно-ориентированного программирования, а также сеттеры в публичном интерфейсе, но внутри класса вы всегда должны поля доступа напрямую.

Подробнее о производительности здесь.

Ответ 2

В соответствии с советами по производительности, представленными командой Google android:

Без JIT прямой доступ к полю примерно в 3 раза быстрее, чем вызов тривиальный геттер. С JIT (где прямой доступ к полю дешевле, чем доступ к локальному), прямой доступ к полям примерно в 7 раз быстрее, чем вызывая тривиальный геттер.

Однако я согласен с тем, что хорошая практика кодирования важнее, и команда также упомянула, что:

Обратите внимание: если вы используете ProGuard, вы можете использовать миров, потому что ProGuard может использовать для вас дополнительные инструменты.

Поэтому я считаю, что использовать геттер и сеттер нормально;)

Ссылка

Ответ 3

Потери производительности для сеттеров и геттеров незначительны. Публичные поля - плохая практика и нарушают объектно-ориентированные принципы инкапсуляции данных и скрытия информации.

Использование setter или getter требует, чтобы один вызов свойства больше, чем прямой доступ к полю. Это ничего, поэтому не беспокойтесь об этом - сосредоточьтесь на написании хорошего кода.

изменить:

Чтобы уточнить, это из того же документа для Android, что и другие плакаты:

Разумно придерживаться общих методов объектно-ориентированного программирования и имеют геттеры и сеттеры в публичном интерфейсе, но в пределах класса, вы всегда должны напрямую обращаться к полям.

Другими словами, вам все еще нужны геттеры и сеттеры. Вам просто следует попытаться избежать вызова из класса, содержащего эти методы, поскольку у вас есть прямой доступ к полю.