2011-05-13 75 views
1

我正在爲我的Java類執行此AntFarm項目。這個項目由不同的類組成(Food,WorkerAnt,Queen),它們使用一個接口(使用一種稱爲過程的方法)相互交互。無法找到符號符號:方法過程(WorkerAnt)

http://ljhs.sandi.net/faculty/volger/apajava/GridWorld/Assignments/AntFarm/ - 項目

我目前停留在WorkerAntprocessActors()方法。 (這幾乎是在頁面的底部。)

當前的代碼如下:

public void processActors(ArrayList<Actor> actors) { 
    for (Actor nextActor : actors) { 
    nextActor.process(this); 
    } 
} 

我得到的錯誤如下。

找不到符號符號:方法處理(WorkerAnt)

+4

請選擇一個更好的標題。例如,「無法找到AntFarm(作業)項目的符號符號問題」。 – Arafangion 2011-05-13 00:09:45

+1

Actor類是否包含process()方法? – Salem 2011-05-13 00:10:09

+1

另外,方法過程(WorkerAnt)是否存在? – Arafangion 2011-05-13 00:10:17

回答

2

通過鏈接將要去,Actor沒有一個process(WorkerAnt)方法。

相反,這是Processable接口的一部分(因此也是Food)。

因此,請確保您的ActorActor實施Processable(例如Food)。

理想情況下,您會將processActors(ArrayList<Actor> actors)方法更改爲類似processProcessables(ArrayList<Processable> processables)的方法。

但是,我在任務中看到您需要實施processActors(ArrayList<Actor> actors),所以您不能真正做到這一點(儘管我將這稱爲糟糕的設計 - 它類似於使用方法divide(object, object)而不是divide(double, double))。

要知道爲什麼它是壞的設計,分配說

processActors:在演員的每個角色需要調用它的工藝方法。

除了Actor都不具備的process方法 - Processable就做,和Actor s爲不Processable

在任何情況下,你將不得不接受的事實,你期待一些Actor使他能Processable S和做這樣的事情:

for(Actor nextActor : actors) 
{ 
    if (nextActor instanceof Processable) 
     ((Processable)nextActor).process(this); 
} 

但是,你應該從分配意識到了這一點:

一個演員可能是QueenAnt,蛋糕, Cookie或WorkerAnt。如果沒有 可處理接口,processActors 將需要確定 角色的類型,然後在調用 過程之前向下參與角色 參考。但是,由於這些類中的每一個都實現了可處理,所以processActors只需在調用之前將 角色轉換爲可處理。 允許這種多態處理 ,因爲Processable包含 流程抽象方法。 Java Run 時間環境(JRE)在運行時確定對象的實際類型 ,並且 調用相應的處理方法。

相關問題