Java直接转换vs使用局部变量进行转换

时间:2013-06-19 09:32:14

标签: java casting

免责声明:我不确定这个问题是否是目前的问题。如果很难回答或者实际上不可能,我会重新发布一个可编辑的例子,但我目前没有时间。

有人能告诉我为什么这会编译:

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

3 个答案:

答案 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
        }
    }
}

请注意错误行中的其他括号。你必须先施放,然后调用方法。