2011-04-17 46 views
0

我正在看一个程序,它包含一条我不理解的行。可以解释一下这段代码在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"); 
    } 
} 
+0

它的类型转换。 – Layke 2011-04-17 00:07:10

+1

[The Java Tutorials - Learning the Java language - Inheritance](http://download.oracle.com/javase/tutorial/java/IandI/subclasses.html) – BalusC 2011-04-17 00:09:25

回答

3

据铸造名为o到告示栏实例的可观察对象。更好的是,如果o是告示栏的实例前检查(否则你会得到一个ClassCastException - 如果它不是):

if(o instanceof NoticeBoard) { 
    NoticeBoard notice = (NoticeBoard) o; 
    System.out.println(notice.getTheNotice()); 
} 

类型转换应尽可能(例如,通过使用Java的泛型)被避免,但在这里需要符合Observer接口签名。

+0

非常感谢Daff的解释。 – 2011-04-17 00:48:26

1

您引用的行是一个表演。 Observable o变成NoticeBoard。 看起来你发布的代码实现了Observer-Observable模式(http://en.wikipedia.org/wiki/Observer_pattern)。该对象得到通知有关更改(public void update())并传递一个通用Observable,在您的情况下是一个NoticeBoard对象。 为了能够访问NoticeBoard对象的特定方法,必须进行转换。

相关问题