有人可以解释这段代码在Java中的含义吗?

时间:2011-04-17 00:04:53

标签: 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" );
    }
}

2 个答案:

答案 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对象的特定方法,必须进行转换。