Просто прочитайте это на сайте разработчика:
Избегайте внутренних геттеров / сеттеров
На родных языках, таких как C ++, распространенной практикой является использование геттеров (например,i = getCount ()) вместо прямого доступа к полю (i = mCount).Это отличная привычка для C ++, потому что компилятор обычно может встроить доступ, и если вам нужно ограничить или отладить доступ к полю, вы можете добавить код в любое время.
В Android это плохая идея,Вызовы виртуальных методов стоят дорого, намного больше, чем поиск полей экземпляра.Разумно следовать общепринятым методам объектно-ориентированного программирования и иметь методы получения и установки в открытом интерфейсе, но внутри класса вы всегда должны обращаться к полям напрямую.
Без JIT прямой доступ к полям примерно в 3 раза быстрее, чем вызовтривиальный добытчик.С JIT (где прямой доступ к полю обходится дешевле, чем доступ к локальному), прямой доступ к полю примерно в 7 раз быстрее, чем вызов тривиального геттера.Это верно для Froyo, но улучшится в будущем, когда JIT встроит методы получения.
Обновление в 2019/05: В текущей версии вышеуказанный материал был удален изdocument!
Значит, вы говорите, что вы будете использовать доступ к полям внутри класса:
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
}
}