免责声明:我不确定这个问题是否是目前的问题。如果很难回答或者实际上不可能,我会重新发布一个可编辑的例子,但我目前没有时间。
有人能告诉我为什么这会编译:
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);
}
答案 0 :(得分:2)
((OutputConnLayerUser) entry.getValue()).addOutputConnLayer(mainOutputConnLayer);
答案 1 :(得分: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
}
}
}
答案 2 :(得分: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
}
}
}
请注意错误行中的其他括号。你必须先施放,然后调用方法。