¿Crear un contenedor para la clase final?
Algo como esto:
class MyClass {
private FinalClass finalClass;
public MyClass {
finalClass = new FinalClass():
}
public void delegatingMethod() {
finalClass.delegatingMethod();
}
}
Una clase contenedora como MyClass
no será aceptada como una instancia de FinalClass
. Si FinalClass
implementa cualquier interfaz, puede implementarla en MyClass
para hacer que las clases sean más parecidas. Lo mismo es cierto para cualquier padre no final del FinalClass
; en ese caso, su diseño MyClass
debería ser compatible con esas clases principales.
Incluso es posible crear una clase contenedora durante el tiempo de ejecución mediante reflexión. En ese caso, puede usar el Proxy
class. Tenga en cuenta que las clases de proxy requieren un conocimiento profundo sobre el sistema de tipo Java.
En la práctica, esto solo funciona si la clase que se envuelve implementa algún tipo de clase de interfaz/resumen y puede proporcionar una instancia de contenedor en lugar del original. Si no puede hacer ninguno de estos, entonces esto es difícil de hacer sin refactorizar el original. –
Por supuesto, no puede reemplazar todas las instancias de FinalClass con MyClass. Pero puede definir su propia interfaz para envolver FinalClass con MyClass. Simplemente nunca haga referencia a FinalClass fuera de MyClass. – Arne
@ArneJan, ¿quisiste decir que no debería referirme al campo 'finalClass' en ninguna otra clase? ¿Por qué? –