Вы можете использовать внутренние классы, тогда между этими двумя экземплярами существуют неявные родительско-дочерние отношения. (Но я не знаю, действительно ли это лучше).
public class ClassA {
private boolean ClassAattr = false;
public class ClassAHandler extends GeneralHandler {
public ClassAHandler() {
// can access ClassAattr
}
}
public ClassA() {
ClassAHandler handler = new ClassAHandler();
}
}
Если вы передадите this
, подклассу потребуется получить доступ к родительскому значению с помощью parent.classAattr
. Мы можем задаться вопросом, правильно ли это в соответствии с законом Деметры .
В таком случае ClassA
передает всю информацию, которую ClassAHandler
требует в конструкторе. Если обработчику требуется значение ClassAttr
, передайте его в конструкторе.
public ClassA() {
ClassAHandler handler = new ClassAHandler( classAattr );
}
Но параметр передается по значению, поэтому я не знаю, работает ли он для вас.
Третий вариант - немного изменить дизайн и включить в обработчик boolean
. Затем ClassA
получает доступ к значению ребенка с помощью handler.handlerAttr
. Ребенок ничего не знает о родителе, но родитель может получить столько информации о ребенке, сколько ему нужно. Это лучше в отношении закона Деметры .
public class ClassAHandler extends GeneralHandler {
boolean handlerAttr;
public ClassAHandler() {
}
}