2011-04-17 43 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對象的特定方法,必須進行轉換。

相關問題