我已经将此示例基于我找到的前一个Switch枚举示例,即使我已经完全复制了它,但是将其更改为适合我自己的示例,它将无法正常工作。问题出在switch(jt)行。
public enum JudgeTypes {
BAD,FAIR,NICE,OTT;
}
public class Judge {
private String name;
private ArrayList<Observer> obsList = new ArrayList<>();
private BadJudgeReactions badJudgeReactions;
private GoodJudgeReactions goodJudgeReactions;
JudgeTypes jt;
public Judge(JudgeTypes jt){
this.jt = jt;
}
public Judge(BadJudgeReactions badJudgeReactions) {
this.badJudgeReactions = badJudgeReactions;
}
public Judge(GoodJudgeReactions goodJudgeReactions){
this.goodJudgeReactions = goodJudgeReactions;
}
public void giveReaction(String name){
switch(jt){
case BAD:
setBadJudgeReactions(new BadJudge());
badJudgeReactions.slaughter(name);
badJudgeReactions.vote();
break;
case FAIR:
setBadJudgeReactions(new FairJudge());
badJudgeReactions.criticise(name);
badJudgeReactions.vote();
break;
case NICE:
setGoodJudgeReactions(new NiceJudge());
goodJudgeReactions.praise(name);
goodJudgeReactions.vote();
break;
case OTT:
setGoodJudgeReactions(new OTTJudge());
goodJudgeReactions.worship(name);
goodJudgeReactions.vote();
break;
}
}
/**
* @return the badJudgeReactions
*/
public BadJudgeReactions getBadJudgeReactions() {
return badJudgeReactions;
}
/**
* @param badJudgeReactions the badJudgeReactions to set
*/
public void setBadJudgeReactions(BadJudgeReactions badJudgeReactions) {
this.badJudgeReactions = badJudgeReactions;
}
/**
* @return the goodJudgeReactions
*/
public GoodJudgeReactions getGoodJudgeReactions() {
return goodJudgeReactions;
}
/**
* @param goodJudgeReactions the goodJudgeReactions to set
*/
public void setGoodJudgeReactions(GoodJudgeReactions goodJudgeReactions) {
this.goodJudgeReactions = goodJudgeReactions;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
}
答案 0 :(得分:1)
您在switch语句中使用字段jt
,但jt
可能尚未初始化,因为在3个构造函数中有2个您没有分配值它。
在这种情况下,交换机将引发NullPointerException
。
因此,请确保为所有构造函数中的字段jt
分配值。
答案 1 :(得分:0)
更改此
JudgeTypes jt;
到
JudgeTypes jt = JudgeTypes.Any_ENUM;
答案 2 :(得分:0)
您没有正确使用构造函数。理想情况下,如果不强制用户将它们作为构造函数的参数传递,则应该初始化类的所有数据库。尝试初始化数据库&#34; JudgeTypes jt;&#34;你的问题将得到解决。