Puede usar clases internas, hay una relación padre-hijo implícita entre las dos instancias. (Pero no sé si realmente es mejor).
public class ClassA {
private boolean ClassAattr = false;
public class ClassAHandler extends GeneralHandler {
public ClassAHandler() {
// can access ClassAattr
}
}
public ClassA() {
ClassAHandler handler = new ClassAHandler();
}
}
Si pasa this
, la subclase tendrán que acceder al valor padre con parent.classAattr
. Podemos preguntarnos si es correcto según el law of demeter.
Otra opción sería que ClassA
pase toda la información que ClassAHandler
requiere en el constructor. Si el controlador requiere el valor de ClassAttr
, páselo en el constructor.
public ClassA() {
ClassAHandler handler = new ClassAHandler(classAattr);
}
Pero el parámetro se pasa por valor, así que no sé si funciona para usted.
Una tercera opción sería cambiar un poco el diseño y tener el boolean
en el controlador. Luego ClassA
accede al valor del niño con handler.handlerAttr
. El niño no sabe nada sobre el padre, pero el padre puede acceder a la mayor cantidad de información que desee del niño. Esto es mejor con respecto al law of demeter.
public class ClassAHandler extends GeneralHandler {
boolean handlerAttr;
public ClassAHandler() {
}
}
Artículo interesante, pero no hay respuesta para la pregunta – user123444555621