Compartiendo constantes en varias clases (dragador de minas androide)

Estoy creando instancias de una clase con el botón extends y el acceso a una variable entera directamente para un mejor rendimiento. Estoy utilizando constantes para identificar fácilmente la configuración actual de la variable.

Tengo las constantes declaradas tanto la clase Button como en la clase Activity que las está instanciando. He encontrado preguntas similares y leído no es una buena práctica para crear una clase sólo para mantener las constantes.

¿Cuál es la mejor manera de usar la misma declaración constante en ambas clases?

Soy un programador principiante por lo que es muy posible que estoy con vistas a una solución simple.

Clase del botón:

public class GridButton extends Button { public int displayStatus; // constants for mine display status private static final int UNTOUCHED = 1; private static final int UNCOVERED = 2; private static final int FLAGGED = 3; private static final int HIT = 4; ... } 

Clase de actividad:

 public class PlayGameActivity extends Activity { private GridButton[][] gridButtons; // constants for mine display status private static final int UNTOUCHED = 1; private static final int UNCOVERED = 2; private static final int FLAGGED = 3; private static final int HIT = 4; ... // eg accessing displayStatus value if (gridButtons[currentRow][currentColumn].displayStatus == FLAGGED) { } } 

Para compartir cosas, puede hacer las constantes en una clase separada y acceder a ella de forma estática

 class Constants { public static final int UNTOUCHED = 1; } 

Y luego en ambas clases podrías ir Constants.UNTOUCHED .

En este caso, evitaría usar números mágicos y los reemplazaría con un Enum.

 enum DisplayStatus { Untouched, Uncovered, Flagged, Hit } 

Y reemplazar todos los int displayStatus con DisplayStatus displayStatus . Ahora es claramente para usted y otros lectores del código lo que int representa.

Lo ideal es que siempre desee utilizar un tipo específico para restringir el rango de valores posibles. En su ejemplo, sólo los números 1-4 son válidos, pero su tipo es tan amplio como un int así que podría ser cualquier valor (por ejemplo, -1 o 23543 ).

¡Buena suerte!

¿Cuál es la mejor manera de usar la misma declaración constante en ambas clases?

PlayGameActivity una vez (por ejemplo, en PlayGameActivity ) y PlayGameActivity desde ambos lugares (descartando el modificador private ). GridButton puede referirse a PlayGameActivity.UNTOUCHED y así sucesivamente, si te deshaces de private .

Creo que el enum es una buena solución como se mencionó anteriormente. Sin embargo, ya que tiene diferentes estados de los botones de la cuadrícula que podría considerar el uso de patrón de diseño de Java State . Puesto que usted es un principiante, como usted dice, puede encontrar un poco confuso e incluso innecesario, pero creo que le ayudará a desarrollar sólidas habilidades de programación. Por último, recuerdo que había desarrollado un dragaminas yo mismo, en java simple, sin embargo, no android, y yo había utilizado el patrón Observer para los botones de la cuadrícula. Una vez que un botón estaba cambiando, notificó a los vecinos para cambiar su estado también.

  • Java.lang.IllegalStateException en el método MediaPlayer.isplaying ()
  • Cómo comparar representaciones de cadena de dobles si termina en .00
  • Lista de la documentación de Android Ver ejemplo Código fuente en XML
  • Android cómo leer el código Java obfuscated después de conseguir a través de la ingeniería inversa
  • GetActionBar (). SetDisplayHomeAsUpEnabled (true) lanza NullPointerException
  • ¿Qué hace synchronized () / wait () / notifyAll () en Java?
  • JUnit4 TextUtils.isEmpty () da un resultado diferente que String.isEmpty ()
  • java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl no se puede convertir en javax.net.ssl.HttpsURLConnection
  • ReadLine y codificación de la tabla ascii extendida
  • Android.support.v4.util.Pair vs android.util.Pair
  • Carga de una biblioteca nativa en una prueba de Android JUnit
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.