我正在查看一个程序,其中包含我不理解的一行。

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泛型),但此处需要遵守观察者接口签名。

07-24 09:32