Я пытаюсь создать класс View, который обеспечивает горизонтальную или вертикальную компоновку в зависимости от того, как он создается. Я использую делегата для достижения этой цели.
class View extends Manager {
private Manager mDelegate;
public View(Manager inDelegate) {
mDelegate = inDelegate;
// the delegate is the only child of "this" manager.
super.add(mDelegate);
}
public void add(Field f) {
// all other children go into the delegate.
mDelegate.add(f);
}
// other methods that also delegate
}
Когда я создаю экземпляр объекта View, я передаю его в горизонтальный или вертикальный менеджер полей, а затем делегирую ему вызовы. Это то, что класс Screen делает в blackberry.
На самом деле, я просматриваю документы Blackberry для Screen, чтобы увидеть, какие вызовы он делегирует (чтобы я мог эмулировать это), и я замечаю такие вызовы в Screen ...
защищенный логический ключChar (char c, int status, int time)
Делегирует событие генерации ключа в контролируемое поле с фокусом.
Этот метод вызывает Manager.keyChar (char, int, int) в диспетчере делегатов этого экрана.
Итак, меня сразу же осенило, как в мире они вызывают защищенный метод для делегата экрана? Или документы не так, и этот метод не делегирован?
Кто-нибудь знает, как они этого добиваются?