Basta con leer esto en el sitio dev:Rendimiento Android - 'Evitar interna getters/setters'
Avoid Internal Getters/Setters
En lenguas nativas como C++ es una práctica común utilizar captadores (por ejemplo, i = getCount()) en lugar de acceder al campo directamente (i = mCount). Este es un hábito excelente para C++, ya que el compilador generalmente puede alinear el acceso, y si necesita restringir o depurar el acceso al campo, puede agregar el código en cualquier momento.
En Android, esta es una mala idea. Las llamadas a métodos virtuales son costosas, mucho más que las búsquedas de campo de instancias. Es razonable seguir prácticas comunes de programación orientada a objetos y tener getters y setters en la interfaz pública, pero dentro de una clase siempre se debe acceder directamente a los campos.
Sin un JIT, el acceso directo al campo es aproximadamente 3 veces más rápido que invocar un getter trivial. Con el JIT (donde el acceso directo en el campo es tan barato como acceder a un local), el acceso directo al campo es aproximadamente 7 veces más rápido que invocar un getter trivial. Esto es cierto en Froyo, pero mejorará en el futuro cuando el JIT incorpore métodos getter.
Así que está diciendo que usaría el acceso de campo dentro de la clase:
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;
}
}
Pero ¿qué pasa con el acceso de otro objeto:?
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
}
}
Solo para señalar esto, recuerde que Dalvik no es JVM y esta práctica no debe tomarse como una forma general de hacer en el desarrollo normal de Java. – Esko
Su cita lo dice todo, ¿verdad? ** Es razonable seguir prácticas comunes de programación orientada a objetos y tener getters y setters en la interfaz pública **. Además: no vayas por exceso de diseño. Simplemente use el getter a menos que haga una gran cantidad de llamadas. o tiene un problema de velocidad. – Nanne