Enum的switch语句不起作用

时间:2015-11-17 11:05:13

标签: java enums switch-statement

我已经将此示例基于我找到的前一个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;
    }
}

3 个答案:

答案 0 :(得分:1)

您在switch语句中使用字段jt,但jt 可能尚未初始化,因为在3个构造函数中有2个您没有分配值它。

在这种情况下,交换机将引发NullPointerException

因此,请确保为所有构造函数中的字段jt分配值。

答案 1 :(得分:0)

更改此

JudgeTypes jt;

JudgeTypes jt = JudgeTypes.Any_ENUM;

答案 2 :(得分:0)

您没有正确使用构造函数。理想情况下,如果不强制用户将它们作为构造函数的参数传递,则应该初始化类的所有数据库。尝试初始化数据库&#34; JudgeTypes jt;&#34;你的问题将得到解决。