Android Dev: избегать внутренних геттеров / сеттеров? - PullRequest
2 голосов
/ 16 января 2012

Я читал этот раздел в Android Dev Guide:

здесь

и мне было интересно, что такое "вызов виртуального метода" и что это значит, когда он говорит "локально", используя метод получения / установки? Я пытаюсь выяснить, избегают ли они использования методов EVER (например, метода из экземпляра объекта) или просто внутри класса, в котором вы уже работаете, чтобы получить переменную?

Подводя итог, можно сказать, что если я учусь в другом классе и хочу узнать значение переменной в другом классе, будет ли стоить otherclass.getX() дороже, чем otherclass.x? Или это та же производительность, если в текущем классе не выполняется ни метод, ни прямой доступ к публичной переменной?

Ответы [ 4 ]

3 голосов
/ 16 января 2012

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

По-прежнему рекомендуется (и часто) делать членыприватные и предоставляют общедоступные методы доступа для внешнего использования.

HTH

2 голосов
/ 16 января 2012

То, что в основном говорится в статье, - это избегать паттеров-получателей / установщиков, когда вы можете сойти с рук. В Java все методы являются виртуальными, которые не помечены модификаторами private или final, поэтому они говорят, что если ваш код не предназначен для реализации другими классами, просто обращайтесь к полям напрямую. Скорее всего, причина, по которой они указывают на это, заключается в том, что традиционно Java рекомендует всегда использовать шаблон getter / setter, чтобы ваши переменные могли быть конфиденциальными. Тем не менее, в Android вы можете получить довольно серьезный удар по производительности, если добавите этот дополнительный уровень абстракции.

Итак, в заключение. Если вы создаете API, который будут реализовывать другие классы, то, возможно, оно того стоит, чтобы снизить производительность геттеров / сеттеров. Но в ваших собственных классах, которые взаимодействуют друг с другом, и вы не выполняете контракт, просто обращайтесь к переменным напрямую. Внешние классы, получающие доступ к вашему классу, также получат тот же выигрыш в производительности, получая доступ к переменной напрямую, но в какой-то момент вам необходимо выполнить оценку производительности и ремонтопригодности, чтобы убедиться, что вы чувствуете себя комфортно, публикуя эти переменные или стоит ли их принимать. методы получения и использования методов получения / установки

2 голосов
/ 16 января 2012

Использование методов получения и установки дороже, потому что сначала виртуальная машина ищет метод из таблицы виртуальных методов, а затем выполняет вызов. Для более быстрого доступа к Android прямой доступ к переменным-членам снижает накладные расходы

0 голосов
/ 10 мая 2013

Есть МНОГО, МНОГИЕ веские причины всегда использовать геттеры (и часто используют сеттеры) в Java, и это все еще хорошая практика придерживаться даже при написании кода для 'Droid.

Несмотря на то, что при использовании Dalvik использование виртуальных методов (т. Е. Методов получения / установки), а не доступа к полям экземпляров, наивно обходится дороже - вы можете избежать этого, используя ProGuard для встраивания этих вызовов во время сборки!

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

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