我正在查看一个程序,它包含一条我不理解的行。
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" );
}
}
答案 0 :(得分:3)
它将名为o的Observable Object强制转换为NoticeBoard的一个实例。如果o是NoticeBoard的一个实例,那么最好先检查一下(否则如果不是则会得到ClassCastException):
if(o instanceof NoticeBoard) {
NoticeBoard notice = (NoticeBoard) o;
System.out.println( notice.getTheNotice() );
}
如果可能的话,应该避免使用Typecasts(例如,使用Java Generics),但这里需要符合Observer接口签名。
答案 1 :(得分:1)
您引用的行是演员表。 Observable o
被投放到NoticeBoard
。
您发布的代码似乎实现了Observer-Observable模式(http://en.wikipedia.org/wiki/Observer_pattern)。该对象会收到有关更改(public void update()
)的通知,并传递一个通用的Observable,在您的情况下是一个NoticeBoard
对象。
为了能够访问NoticeBoard
对象的特定方法,必须进行转换。