我正在查看一个程序,其中包含我不理解的一行。
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" );
}
}
最佳答案
它将名为o的Observable Object强制转换为NoticeBoard的实例。更好的方法是先检查o是否是NoticeBoard的实例(否则,则得到ClassCastException):
if(o instanceof NoticeBoard) {
NoticeBoard notice = (NoticeBoard) o;
System.out.println( notice.getTheNotice() );
}
尽可能避免类型转换(例如,使用Java泛型),但此处需要遵守观察者接口签名。