Forzar subclases para establecer una variable en java

Estoy desarrollando en Android y tengo una situación relativamente simple que estoy tratando de implementar de la mejor manera posible.

Simplemente, tengo una clase que define todos los parámetros básicos para una pantalla determinada. Desde aquí cada pantalla de la aplicación es una subclase de esta. Necesito que cada pantalla (es decir, subclase) establezca el valor de una variable en su implementación (es decir, cada pantalla debe definir qué nivel es en un árbol de navegación).

Además, idealmente, esta variable debe ser final cuando se establece en las subclases (me doy cuenta de que esto probablemente no es posible).

¿Cuál es la mejor manera de hacer esto? ¿Existe una manera de aplicar correctamente este tipo de comportamiento en Java?

2 Solutions collect form web for “Forzar subclases para establecer una variable en java”

El comentario de @ pst lleva a esta solución.

Esto no se puede hacer con una variable. Pero una clase abstracta puede requerir que se implemente un método particular: este método podría devolver el valor aplicable

De declarar una función abstract para establecer o devolver la variable, puede obligar a cualquier subclase a implementarla correctamente.

A continuación, la función debe ser llamada por cada subclase individual de la clase externa. Esto implica que debe hacerse en alguna parte de la clase externa. Esto se puede hacer en el constructor sin argumentos de la clase externa sin tener que preocuparse por las subclases que llaman super :

Nota: Si un constructor no invoca explícitamente un constructor de superclase, el compilador Java inserta automáticamente una llamada al constructor sin argumentos de la superclase. Si la superclase no tiene un constructor sin argumento, obtendrá un error en tiempo de compilación. El objeto tiene tal constructor, así que si el objeto es la única superclase, no hay problema. (Documentos Java: Super)

En base a esto, esta solución se mantendrá y forzará correctamente la variable que se establecerá siempre y cuando:

  1. No se crea ningún otro constructor en la superclase (por lo tanto super no se puede usar en una subclase para llamar a un constructor diferente)
  2. Todos los demás constructores de la superclase todavía llaman al constructor por defecto internamente

El código:

Superclase:

 public abstract class SuperClass { // Variable all inner classes must set static int myVar = 0; public SuperClass() { myVar = giveValue(); } public abstract int giveValue(); } 

Subclase:

 public class SubClass extends SuperClass { @Override public int giveValue() { return 5; // individual value for the subclass } } 

En lugar de obligar a que las clases infantiles inicialicen los campos, puede seguir una estrategia de composición haciendo que el constructor de su clase adopte un parámetro que implemente una interfaz que proporcione los campos que desea inicializar.

  • Java / Android Método de llamada desde cadena WITH Value
  • Error de Android: no se puede realizar esta operación porque se ha cerrado el grupo de conexiones
  • ¿Es esta Runnable a salvo de fugas de memoria?
  • Variable de ruta de clase unbound java android eclipse
  • Firewall de Android con VpnService
  • Dibujo 2D eficiente en Android
  • JSONObject devuelve un valor no nulo de "null" después de instanciar con cadena
  • PowerManager.WakeLock en dispositivos Android
  • ¿Cómo crear un archivo - incluyendo carpetas - para una ruta determinada?
  • SlidingDrawer semi abierto al inicio
  • Reutilización de tareas asíncronas de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.