Sie könnten innere Klassen verwenden, dann gibt es eine implizite Eltern-Kind-Beziehung zwischen den beiden Instanzen. (Aber ich weiß nicht, ob es wirklich besser ist).
public class ClassA {
private boolean ClassAattr = false;
public class ClassAHandler extends GeneralHandler {
public ClassAHandler() {
// can access ClassAattr
}
}
public ClassA() {
ClassAHandler handler = new ClassAHandler();
}
}
Wenn Sie this
passieren, müssen die Unterklasse mit parent.classAattr
den übergeordneten Wert zuzugreifen. Wir können uns fragen, ob es nach der law of demeter korrekt ist.
Eine andere Option wäre dann, dass ClassA
alle Informationen übergeben, die ClassAHandler
im Konstruktor erfordert. Wenn der Handler den Wert ClassAttr
benötigt, übergeben Sie ihn im Konstruktor.
public ClassA() {
ClassAHandler handler = new ClassAHandler(classAattr);
}
Aber der Parameter wird nach Wert übergeben, so dass ich nicht weiß, ob es für Sie funktioniert.
Eine dritte Option wäre, das Design ein bisschen zu ändern und die boolean
im Handler zu haben. Dann greift ClassA
auf den Wert des Kindes mit handler.handlerAttr
. Das Kind weiß nichts über den Elternteil, aber der Elternteil kann auf so viele Informationen zugreifen, wie das Kind möchte. Dies ist besser in Bezug auf die law of demeter.
public class ClassAHandler extends GeneralHandler {
boolean handlerAttr;
public ClassAHandler() {
}
}
Interessanter Artikel, aber keine Antwort auf die Frage – user123444555621