¿Cómo debo resolver el problema de necesitar llamar a this() y super() al mismo tiempo?
Vale, entonces tengo un problema bastante específico. Tengo una estructura de clases similar a esta (simplificada para facilitar la comprensión).
class A {
A() {
// larga inicialización
}
A(int someValue) {
this();
// hacer algo con someValue
}
}
class B extends A {
B() {
super();
// larga inicialización
}
B(int someValue) {
// ¿Qué debo hacer aquí?
}
}
Pero ahora quiero ser capaz de construir la clase B utilizando el segundo constructor. Sin embargo, el segundo constructor debería llamar al constructor super(someValue)
para hacer uso del parámetro someValue
, pero al mismo tiempo debe llamar a this()
para evitar duplicar la inicialización de esta clase. El problema es que no puedo llamar a los constructores this
y super
al mismo tiempo.
Además, no puedo extraer la inicialización del primer constructor a algún método, porque tengo algunos campos final
que necesitan inicializarse dentro del constructor para mantenerse final
.
davy.ai
Para resolver este problema, puedes crear un nuevo constructor en la clase
A
que tome tanto el parámetroint someValue
como una banderaboolean
que indique si realizar o no la inicialización larga. Luego, en la claseB
, puedes llamar a ese nuevo constructor deA
pasando el parámetrosomeValue
ytrue
para la bandera para realizar la inicialización larga, y también llamarthis()
para evitar duplicar la inicialización deB
. Aquí está el código actualizado:Con este enfoque, puedes construir
B
utilizando el segundo constructor y aún utilizar el parámetrosomeValue
y la inicialización larga tanto deA
como deB
.