2011-09-03 54 views
0

我正在模擬無線傳感器網絡。我必須在模擬中創建一個節點。Java:爲類類型參數添加什麼?

創建節點的函數在類Simulator中定義。這裏SimulatorRadioModel是兩個用戶定義的類。

爲了創建節點,我有一個預定義的函數,即在Simulator類中定義的createNode()。它具有以下語法:

Node createNode(Class nodeClass, RadioModel radioModel, int nodeId, 
       double x, double y, double z) 

這裏我很好RadioModel參數,除了"Class nodeClass"所有其他參數都工作正常。用什麼來代替這個論點,即nodeclass

任何幫助將是非常有用....


是dacwe,就像你說的Node類是由我實例Mica2Node類擴展。我已經通過參數
sim1.createNode(Mica2Node.class, g, nodeId,x,y,z);

這裏sim1是Simulator類的一個對象,g是類RadioModel的一個對象。因爲createNode不是一個靜態方法,所以我通過object調用它。但我還面臨另外三個警告:從其他課程,例如, Application.java

public Application(Node node){ 
    this.node = node; 
    node.addApplication(this); 
} 

它在addApplication(this)方法中顯示錯誤。該方法在Node.java定義如下:

public void addApplication(Application app){ 
    app.nextApplication = firstApplication; 
    firstApplication = app; } 

和誤差是如下:在螺紋

異常「主」了java.lang.RuntimeException:不可編譯的源代碼 - 錯誤的符號類型:( )net.tinyos.prowler.Application。(Application.java:31) at net.tinyos.prowler.TestBroadcastNode $ BroadcastApplication。(TestBroadcastNode.java:36) at net.tinyos.prowler.TestBroadcastNode.main() TestBroadcastNode.java:118)

請幫我......

+0

如果你有多個類節點,爲什麼不把他們全部從方法'createNode一個抽象類繼承(RadioModel radioModel,int nodeId,double x,double y,double z)',然後調用'Node n = new SpecificNode(radModel,nodeId,x,y,z);'? –

+0

如果您想提供更多詳細信息,請簡單編輯您的問題。嚴格保留答案以解決您的問題。 –

回答

0

你在找這樣的事嗎?

public <T extends Node> T createNode(Class<T> clazz, RadioModel radioModel, 
      int nodeId, double x, double y, double z); 

這可以像

RadioModel radioModel = ... 
MyNode node = createNode(MyNode.class, radioModel, 1, 2, 3); 

另一種方法可能是創建一個工廠,封裝了所有的節點類型的創建,例如使用,

public interface NodeFactory { 
    public MyNode createMyNode(..); 
    public YourNode createYourNode(..); 
} 
0

這是(proably)這種方法應該創建一種類型的createNode方法。

您有一些擴展了Node的「節點類」(在下面的示例中爲BigNodeSomeOtherNode)。所以你使用類信息來創建其中的一個。

主叫部分:

Node created = Simulator.createNode(BigNode.class, radioModel, nodeId, x, y, z); 

createNode實施:

Node createNode(Class nodeClass, RadioModel radioModel, int nodeId, 
       double x, double y, double z) { 

    if (nodeClass.equals(BigNode.class)) 
     return new BigNode(radioModel, nodeId, x, y, z); 

    if (nodeClass.equals(SomeOtherNode.class)) { 
     return new SomeOtherNode(.....); 

    throw new IllegalArgumentException("could not create node of type " + 
             nodeClass); 
} 
+0

我想這就是他要求的,但是調整簽名或者使用工廠,甚至是雙重調度的原則,你可以在沒有任何'instanceof'語句的情況下離開。 –

+0

啊,現在你提到它了,它應該是'equals'。更新! – dacwe

+0

是的dacwe,正如你所說Node類是由我正在實例化的Mica2Node類擴展的。我已經通過了參數sim1.createNode(Mica2Node.class,g,nodeId,x,y,z);這裏sim1是Simulator類的一個對象,g是類RadioModel的一個對象。因爲createNode不是一個靜態方法,所以我通過object調用它。但我還面臨另外三個警告:從其他課程,例如, Application.java公共應用程序(節點節點){0} {0}}} \t \t node.addApplication(this); \t} –

相關問題