2013-06-19 74 views
0

免責聲明:我不確定這個問題是否可以回答,因爲它目前代表。如果答案非常難或實際上不可能,我會重新發佈一個可編輯的例子,但我目前沒有時間。Java直接投與vs使用本地變量投射

誰能告訴我爲什麼這個編譯:

public void addOutputConnLayer(OutputConnLayer mainOutputConnLayer) { 
    for (Map.Entry<String, AbstractPanelController<? extends AbstractPanelModel, 
      ? extends AbstractPanelView<? extends AbstractPanelModel>>> entry : subControllers.entrySet()) { 
     if (entry.getValue() instanceof OutputConnLayerUser) { 
      OutputConnLayerUser tmp = (OutputConnLayerUser)entry.getValue(); 
      tmp.addOutputConnLayer(mainOutputConnLayer); 
     } 
    } 
} 

而我得到一個「OutputConnLayerUser不能被解析爲一個變量」錯誤,當我不使用局部變量?例如:

public void addOutputConnLayer(OutputConnLayer mainOutputConnLayer) { 
    for (Map.Entry<String, AbstractPanelController<? extends AbstractPanelModel, 
      ? extends AbstractPanelView<? extends AbstractPanelModel>>> entry : subControllers.entrySet()) { 
     if (entry.getValue() instanceof OutputConnLayerUser) { 
      (OutputConnLayerUser)(entry.getValue()).addOutputConnLayer(mainOutputConnLayer); //<--- this line produces the error 
     } 
    } 
} 

OutputConnLayerUser是一個單一方法的接口。它看起來如下:

public interface OutputConnLayerUser { 

    public void addOutputConnLayer(OutputConnLayer ocl); 
} 
+1

正確包裝'((OutputConnLayerUser)(entry.getValue()))'。 – NINCOMPOOP

+0

哦,我的上帝...... *評論必須至少有15個字符的長度* – deinocheirus

回答

2
((OutputConnLayerUser) entry.getValue()).addOutputConnLayer(mainOutputConnLayer); 
1

您沒有正確投射。缺少另一個括號這裏

public void addOutputConnLayer(OutputConnLayer mainOutputConnLayer) { 
    for (Map.Entry<String, AbstractPanelController<? extends AbstractPanelModel, 
      ? extends AbstractPanelView<? extends AbstractPanelModel>>> entry : subControllers.entrySet()) { 
     if (entry.getValue() instanceof OutputConnLayerUser) { 
      **(**(OutputConnLayerUser)(entry.getValue())**)**.addOutputConnLayer(mainOutputConnLayer); //<--- this line produces the error 
     } 
    } 
} 
0

你必須做一個適當的轉換:

public void addOutputConnLayer(OutputConnLayer mainOutputConnLayer) { 
    for (Map.Entry<String, AbstractPanelController<? extends AbstractPanelModel, 
      ? extends AbstractPanelView<? extends AbstractPanelModel>>> entry : subControllers.entrySet()) { 
     if (entry.getValue() instanceof OutputConnLayerUser) { 
      ((OutputConnLayerUser)(entry.getValue())).addOutputConnLayer(mainOutputConnLayer); //<--- this line produces the error 
     } 
    } 
} 

請注意在錯誤的行額外的支架。你必須先施放,然後調用該方法。