2012-09-19 16 views
19

interior de una sola actividad, al definir los componentes que se utilizarán sólo dentro de esa actividad, ¿cuál es la diferencia real entre las siguientes definiciones:pública o privada, es lo que realmente importa con variables Android

Button btnPower = null; 
//or 
private Button btnPower = null; 
//or 
public Button btnPower = null; 

public void somethingUsingTheButton(){ 
    btnPower = (Button)findViewById(R.id.btnpower_id); 
} 

¿Hay algunos las convenciones "bajo el capó" que deberían tenerse en cuenta (limpieza de basura, memoria, etc.) que sugerirían usar siempre privado sobre público, si la entidad en sí misma solo será utilizada dentro de la clase en la que está escrita?

+1

En su mayor parte, especialmente en el escenario que describe dónde está todo en una sola clase/actividad, se considera buena forma de limitar el alcance de las variables que utiliza. –

Respuesta

20

campos privados promueven encapsulation

Es una convención generalmente aceptada para usar private a menos que necesite para exponer un campo o método a otras clases. Entrar en esto como un hábito le ahorrará mucho dolor a largo plazo.

Sin embargo, no hay nada intrínsecamente incorrecto con un campo o método public. No causa diferencia para la recolección de basura.

En algunos casos, algunos tipos de acceso afectarán el rendimiento, pero probablemente sean un poco más avanzados que el tema de esta pregunta.

Uno de estos casos tiene que ver con las clases internas que acceden a los campos de clases externas.

class MyOuterClass 
{ 
    private String h = "hello"; 

    // because no access modifier is specified here 
    // the default level of "package" is used 
    String w = "world"; 

    class MyInnerClass 
    { 
     MyInnerClass() 
     { 
      // this works and is legal but the compiler creates a hidden method, 
      // those $access200() methods you sometimes see in a stack trace 
      System.out.println(h); 

      // this needs no extra method to access the parent class "w" field 
      // because "w" is accessible from any class in the package 
      // this results in cleaner code and improved performance 
      // but opens the "w" field up to accidental modification 
      System.out.println(w); 
     } 
    } 
} 
+2

Nunca supe de esos métodos ocultos, por lo tanto, voté positivamente –

0

Si su declaración de variable está dentro del alcance de la actividad, normalmente actúa como una variable de ámbito que normalmente lo haría.

Sin embargo, es una mala práctica de programación utilizar variables de un método en otro método cuando no son parámetros.

Ejemplo:

malo:

void Foo() 
{ 
    int foo = 5; 
    System.out.println(Bar()); 
} 

int Bar() 
{ 
    return foo + 5; 
} 

En realidad, esto arrojará un error de sintaxis, porque foo se declara fuera del alcance de Bar()

bueno:

int foo; 

void Foo() 
{ 
    foo = 5; 
    System.out.println(Bar(foo)); //prints 10 
} 

int Bar(int foo) 
{ 
    return foo + 5; 
} 
+0

¿Por qué 'bueno' es bueno sin embargo? –

+0

@Alex porque desea evitar (como principio de diseño) los efectos secundarios innecesarios. Un efecto secundario se define como algo que afecta la información fuera de su contexto actual. – Codeman

+2

Su 'Malo' no compila, por lo tanto, no está mal, sino que no existe. Por lo tanto, Good no se compara con nada, por lo tanto, me pregunto por qué es bueno. –

1

private y public son palabras clave de Java que tienen el propósito de Diseño orientado a objetos. Le sugiero que lea sobre esto: http://docs.oracle.com/javase/tutorial/java/concepts/

Si solo va a utilizar esas variables (objetos) en su actividad, le sugiero que las haga privadas.

Espero que esto ayude.

Editar:

no estoy seguro de si se utiliza la palabra clave privada, pública o no se optimizará aplicación desde un punto de vista de memoria. Por lo que puedo decir, creo que no es así y debes usar lo que hace que tu código sea más legible, intuitivo y fácil de mantener.

+0

Gracias, sé lo que hacen, y sé que NO NECESITAN ser púbicos en mi caso, pero me preguntaba si había algún tipo de administración de memoria vudú o recolección de basura que se ve afectada por si algo es predeterminado o no, público o privado. – Octoth0rpe

2

El alcance de la visibilidad no tiene nada que ver con el recolector de basura o la gestión de memoria

Usted tendrá que reducir el alcance de la visibilidad tanto como sea posible para que su código puede ser más fácil de mantener.

+0

Gracias, Excavar un poco más y parece que esta es la convención: No hay diferencia en la recolección de basura o la gestión de la memoria. privado es. – Octoth0rpe

4

bien, un punto importante es que la definición de variables como privado es el estándar en la programación de Java. Así que llamar directamente a las variables en los objetos parecerá extraño para otras personas que posiblemente puedan leer su código.

Otra cosa que diría es que si no estás solo, codificar un proyecto siempre es una buena práctica para limitar la visibilidad de los atributos que son clave en la implementación de la clase para evitar trabajos extraños que otros desarrolladores pueden presentar.

Personalmente no sé si esos modificadores se utilizan para fines de compilación y optimización.

para concluir, ya que creo que cada codificador de Java experimentado soy muy sujest para utilizar este patrón en la definición de atributos.

Cuestiones relacionadas