Evitar el reemplazo del método en tiempo de ejecución en Java
- La clase A tiene el método x ()
- La clase B hereda A y anula x ()
- La clase C hereda B y anula x ()
Quiero crear una librería de clase que amplíe la clase de actividad y reemplace el método que maneja el botón de retroceso en Android (y más métodos). Quiero que el desarrollador para ampliar mi clase y seguir utilizando su clase de actividad como de costumbre, pero para obligar a llamar a la súper método.
¿Alguna idea de cómo la clase B puede evitar que su método x sea reemplazado en tiempo de ejecución ?
- Android juego rpg inventario del sistema
- Cómo programar el MAC de un dispositivo Android
- NullPointerException en FragmentManager
- OkHttpClient roto después de actualizado Retrofit to Retrofit 2
- Java.lang.OutOfMemoryError en Android 5.0, causado por una asignación de 16k cuando 5M está disponible
(No quiero finalizar x en la clase B.)
Actualizar:
OK, permítanme tratar de explicar lo que quiero lograr – Quiero hacer una lib de clase que se extenderá clase de actividad y anular el método que maneja el botón de nuevo en Android (y más métodos). Quiero que el desarrollador para ampliar mi clase y seguir utilizando su clase de actividad como de costumbre, pero para obligar a llamar a la súper método. Si no lo hace, estoy en problemas.
- FileChannel devuelve el tamaño incorrecto del archivo de la carpeta de activos
- ¿Cuál es la diferencia entre setVideoPath de VideoView y setVideoURI
- Dificultad para portar el código de salida de PCM sin procesar de Java a Android AudioTrack API
- Visualización de valores nulos después de que los primeros usuarios inicien sesión en android
- Uso de la API de host USB de Android para leer mi controlador de juego USB u otros datos de dispositivo USB
- Vista borrosa transparente que difumina el diseño debajo
- ¿El método ArrayList.clear () libera memoria?
- SearchView no filtrar en cada niño Tab de TabLayout
OK, permítanme tratar de explicar lo que quiero lograr – Quiero hacer una lib de clase que se extenderá clase de actividad y anular el método que maneja el botón de nuevo en Android (y más métodos). Quiero que el desarrollador para ampliar mi clase y seguir utilizando su clase de actividad como de costumbre, pero para obligar a llamar a la súper método. Si no lo hace, estoy en problemas.
Una solución es hacer que su método sea final
, pero que lo llame a un segundo método que usted declara como abstract
. A continuación, haga que el otro desarrollador escriba la implementación para ese método abstract
.
Así, por ejemplo, su código podría verse así:
public final void method() { // do your stuff // ... // call the method that the other developer wrote doMethod(); } protected abstract void doMethod();
Cualquiera que esté agregando funcionalidad que se debe llamar al final de su método entonces debe implementar el método abstracto para extender su clase y tener su compilación de código:
protected void doMethod() { // do more stuff }
A continuación, seguirá llamando a method()
como lo hace actualmente. (Pero tenga en cuenta que esto no impide que alguien más llame a doMethod()
directamente, por lo que tendrá que documentar claramente la API).
Puede hacer su método en el paquete de clase B protegido y colocar la clase C en otro paquete.
No sé si se adapte a sus necesidades, pero puede inventar una clase más, D extends B
y luego elegir entre la instancia de D
y C
, utilizando algunos criterios. Puede montar D
en tiempo de ejecución utilizando la reflexión, por lo que dará resultado similar al siguiente:
class A { void f() {System.out.println("Af()");} } class B extends A { void f() {System.out.println("Bf()");} } class C extends B { void f() {System.out.println("Cf()");} } class D extends B { void f() { super.f(); } } class Sample { public static void main(String[] args) { A a; boolean callC = false; if (callC) a = new C(); else a = new D(); af(); } }
- Evento del dispositivo Android onConfigurationChanged no controla la orientación
- Android: Cómo personalizar los títulos de AlertDialog, Dialog y Spinner