Просто прочтите это на сайте разработчиков:
Избегайте внутренних методов получения / установки
В нативные языки, такие как C ++, обычной практикой является использование геттеров (например, i = getCount ()) вместо прямого доступа к полю (i = mCount). Это отличная привычка для C ++, потому что компилятор обычно может встроить доступ, и если вы необходимо ограничить или отладить доступ к полям, вы можете добавить код в любое время.
Для Android это плохая идея. Вызов виртуальных методов обходится дороже, чем поиск в полях экземпляра. Разумно придерживаться обычных объектно-ориентированных практики программирования и имеют геттеры и сеттеры в общедоступном интерфейсе, но внутри класса вы всегда должны обращаться к f ields напрямую.
Без JIT прямой доступ к полю примерно в 3 раза быстрее, чем вызов тривиального получателя. С JIT (где прямой доступ к полю так же дешев, как доступ к локальному), прямой доступ к полю примерно в 7 раз быстрее, чем вызов тривиального получателя. Это верно для Froyo, но улучшится в будущем, когда JIT встроит методы получения.
Обновление в 2019/05: в текущей версии вышеупомянутый материал был удален из документа!
Так говорится в нем. вы бы использовали доступ к полям внутри класса:
public class MyObject {
public Object innerObject; // This would be private if I was using a getter
public void doSomeStuff(){
if(innerObject){ // Within class access like this
// ....
}
}
public Object getInnerObject(){ // This would be removed if I was using field access
return innerObject;
}
}
Но как насчет доступа из другого объекта ?:
public class SecondObject {
public void doSecondSomething(){
MyObject ob = new MyObject();
Object inner;
//This is my question basically (from an Android performance perspective)
inner = ob.getInnerObject();
// OR
inner = b.innerObject
}
}