Оператор instanceof предназначен для того, чтобы определять от какого класса произошел объект. Он может быть нужен в тех случаях, когда мы не знаем точно, объект какого класса к нам вернется и необходимо проверить к какому классу относится полученный объект и в зависимости от этого уже действовать дальше. А также, если какой то объект может содержать другие объекты разных классов, но наследников одного предка, у каждого из которых есть различные методы, которые нам необходимо вызывать.
Рассмотрим пример с GWT. Допустим мы в панель класса SimplePanel добавляем в зависимости от условия либо объект созданного нами класса ListDropDownWidget, либо объект класса Anchor. Оба этих объекта являются виджетами.
Теперь нам необходимо перевести содержимое этой панели в состояние readOnly. Для этого нужно получить виджет, который содержится в панели. А в панели может содержаться 2 типа виджетов, как было сказано выше. Поэтому после того, как мы получаем виджет, который содержался в панели, необходимо определить к какому классу он относится. Вот здесь и используется опреатор instanceof. Если содержащийся в панели виджет является объектом класса ListDropdownWidget, то приводим полученный виджет к этому классу и вызываем соответствующий метод. По такой же логике действуем, если виджет является объектом класса Anchor.
Рассмотрим пример с GWT. Допустим мы в панель класса SimplePanel добавляем в зависимости от условия либо объект созданного нами класса ListDropDownWidget, либо объект класса Anchor. Оба этих объекта являются виджетами.
SimplePanel panel = new SimplePanel(); if (question.getQuestionType() == QuestionType.CHECKBOXES) ListDropdownWidget dropdown = new ListDropdownWidget(); panel.setWidget(dropdown); } else { String title = "Title"; Anchor a = new Anchor(title); panel.add(a); }
Теперь нам необходимо перевести содержимое этой панели в состояние readOnly. Для этого нужно получить виджет, который содержится в панели. А в панели может содержаться 2 типа виджетов, как было сказано выше. Поэтому после того, как мы получаем виджет, который содержался в панели, необходимо определить к какому классу он относится. Вот здесь и используется опреатор instanceof. Если содержащийся в панели виджет является объектом класса ListDropdownWidget, то приводим полученный виджет к этому классу и вызываем соответствующий метод. По такой же логике действуем, если виджет является объектом класса Anchor.
public void setReadOnly(boolean readOnly) { Widget widget = panel.getWidget(); if (null != widget) { if (widget instanceof ListDropdownWidget) { ListDropdownWidget dropdown = ListDropdownWidget widget; dropdown.setReadonly(readOnly); } else if (widget instanceof Anchor) { Anchor a = (Anchor) widget; a.setEnabled(!readOnly); } } }
Комментариев нет:
Отправить комментарий