com.sun.jdi.InvocationException在其中使用switch-case时调用方法toString

时间:2014-01-17 11:13:43

标签: java eclipse

当我尝试在调试期间可视化对象的toString()值时,我收到此消息。 我的toString方法是这样的:

@Override
public String toString(){
    String s = "ACTION: <P"+this.playerSit+" "+this.type;
    switch(this.type){
    case DISCARD:
        s+=" "+this.cardDiscarded+">";
        break;
    case CALLVALUE:
        s += " "+this.valueCalled+">";
        break;
    case CALLSCORE:
        s += " "+this.scoreToWin+">";
        break;
    case CALLSUIT:
        s += " "+this.suitCalled+">";
        break;
    }
    return s;
}

在添加switch-case结构之前,它工作正常。

编辑:我修改了代码如下:

@Override
public String toString(){
    String s = "";

    s += "ACTION: <P"+this.playerSit+" "+this.type;

    if(this.type == Type.DISCARD)
        s += " "+this.cardDiscarded+">";
    if(this.type == Type.CALLVALUE)
        s += " "+this.valueCalled+">";
    if(this.type == Type.CALLSCORE)
        s += " "+this.scoreToWin+">";
    if(this.type == Type.CALLSUIT)
        s += " "+this.suitCalled+">";
    return s;
}

现在再次运作。所以问题是转换案例,但我不知道为什么。

2 个答案:

答案 0 :(得分:0)

this.typenull。在switch语句之前添加if检查null以进行验证。

答案 1 :(得分:0)

可能是您的InvocationException实际上屏蔽了NullPointerException,这可能会在您的switch语句中没有default个案时发生。请参阅this previous stack overflow question and answer(特别是最受欢迎的答案的第2号),了解为什么包含default案例有用,Oracle documentation on switch statements用于default个案例的字符串示例。