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.
- Seguridad de subprocesos al realizar iteraciones a través de un ArrayList utilizando foreach
- ¿De dónde viene Enum.values ()?
- Sustitución dinámica de Fragmentos de Android
- Intermitentes marcos lentos en Android OpenGL ES 2.0
- RxJava reintentoCuando vuelve a suscribir la propagación
¿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) { } }
- Modificación inesperada del almacenamiento de contenido de Android Studio
- Estudio de Android: Advertencia mientras intento mover Clase a otro paquete
- Portar aplicaciones java a la plataforma Android
- Esperando que el Cajón de Navegación se cierre antes de inicializar Fragmentos con el lazo vacío while
- Dagger 2 no inicializa una variable
- Convertir milisegundos a TDateTime en Java
- Android: cómo utilizar un temporizador
- Lectura de metadatos XMP del archivo JPG
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.
- Cuando se aplica onBackPressed en Fragment que extiende el diálogo Fragment
- ¿Cómo cambiar la orientación de la pantalla, sin crear una nueva actividad en android?