当我尝试在调试期间可视化对象的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;
}
现在再次运作。所以问题是转换案例,但我不知道为什么。
答案 0 :(得分:0)
this.type
是null
。在switch语句之前添加if检查null以进行验证。
答案 1 :(得分:0)
可能是您的InvocationException
实际上屏蔽了NullPointerException
,这可能会在您的switch语句中没有default
个案时发生。请参阅this previous stack overflow question and answer(特别是最受欢迎的答案的第2号),了解为什么包含default
案例有用,Oracle documentation on switch statements用于default
个案例的字符串示例。