#java
#java
Вопрос:
Я смотрю на программу, и она содержит строку, которую я не понимаю.
NoticeBoard notice = (NoticeBoard) o;
Что делает этот фрагмент кода?
Эта строка взята отсюда (публикую это, потому что вы, ребята, возможно, захотите понять полный контекст строки):
import java.util.Observable;
import java.util.Observer;
class NoticeBoard extends Observable
{
private String theNotice = "";
public void setTheNotice( final String notice )
{
theNotice = notice;
setChanged();
notifyObservers();
}
public String getTheNotice()
{
return theNotice;
}
}
class NoticeBoardObserver implements Observer
{
public void update( Observable o, Object arg )
{
NoticeBoard notice = (NoticeBoard) o;
System.out.println( notice.getTheNotice() );
}
}
class Main
{
public static void main( String args[] )
{
NoticeBoard floor4 = new NoticeBoard();
NoticeBoardObserver anObserver = new NoticeBoardObserver();
floor4.addObserver( anObserver );
floor4.setTheNotice( "Its summer" );
}
}
Комментарии:
1. Учебные пособия по Java — Изучение языка Java — Наследование
Ответ №1:
Это преобразование наблюдаемого объекта с именем o в экземпляр NoticeBoard. Лучше было бы проверить, является ли o экземпляром NoticeBoard (иначе вы получите ClassCastException, если это не так):
if(o instanceof NoticeBoard) {
NoticeBoard notice = (NoticeBoard) o;
System.out.println( notice.getTheNotice() );
}
По возможности следует избегать приведения в соответствие типов (например, используя Java Generics), но здесь это необходимо для соответствия сигнатуре интерфейса Observer.
Ответ №2:
Строка, на которую вы ссылаетесь, является приведением. Observable o
преобразуется в NoticeBoard
. Похоже, что опубликованный вами код реализует шаблон Observer-Observable (http://en.wikipedia.org/wiki/Observer_pattern ). Объект получает уведомление об изменении ( public void update()
) и передает общий наблюдаемый объект, который в вашем случае является NoticeBoard
объектом. Чтобы иметь возможность доступа к конкретным методам NoticeBoard
объекта, он должен быть приведен.