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 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);
}
4

3 回答 3

2
((OutputConnLayerUser) entry.getValue()).addOutputConnLayer(mainOutputConnLayer);
于 2013-06-19T09:34:29.240 回答
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
        }
    }
}
于 2013-06-19T09:33:57.903 回答
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
        }
    }
}

请注意错误所在行中的附加括号。您必须先进行投射,然后再调用该方法。

于 2013-06-19T09:35:41.357 回答