Java Enum返回Null

时间:2015-07-16 23:02:00

标签: java pointers exception enums null

我目前正在使用SpigotAPI为Minecraft创建一个插件。我在这里发布的原因是因为我认为这是一个Java错误。我正在创建一个决斗插件,在我的代码中,它将循环通过枚举,并查看它是否是特定类型。第一次使用它正常工作,没有问题。但是当我第二次尝试它而不重新启动我的插件/程序/代码时,它会将枚举返回为null。这是代码,有没有解决这个问题?

public DuelArenas[] getArenasWithType(DuelTypes type) {
    String suffix = "_NORMAL";
    List<DuelArenas> arenasAsList = new ArrayList<>();
    switch (type) {
        case NORMAL:
            suffix = "_NORMAL";
            break;
    }
    for (DuelArenas arena : duelArenaStatus.keySet()) {
        if (arena.toString().endsWith(suffix)) {
            arenasAsList.add(arena);
        }
    }
    DuelArenas[] arenas = new DuelArenas[arenasAsList.size()];
    return arenasAsList.toArray(arenas);
}

堆栈跟踪:

Caused by: java.lang.NullPointerException
    at me.nick.acore.duels.DuelsAPI.getArenasWithType(DuelsAPI.java:97) ~[?:?]

是的,我已经检查过enum是否为null,实际上它是null。第97行也是

if (arena.toString().endsWith(suffix)) {

最后这里是DuelArena课程

public enum DuelArenas {

ARENA_1_NORMAL, ARENA_2_NORMAL, ARENA_3_NORMAL, ARENA_4_NORMAL, ARENA_5_NORMAL,
ARENA_6_NORMAL, ARENA_7_NORMAL, ARENA_8_NORMAL, ARENA_9_NORMAL, ARENA_10_NORMAL,
ARENA_11_NORMAL, ARENA_12_NORMAL }

谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题是您无法直接将自定义DuelArenas类转换为字符串。但是,当您进行比较以查看.toString()是否以suffix结尾时,我觉得某些事情也会出错。您只能使用.toString将数字转换为字符串,如果您要将数字转换为字符串,则无法以_NORMAL结束。

因此,如果您希望我进一步排查问题,请发布您的DuelArenas课程,但在此之前,我最好的猜测是当您执行arena.toString时,您希望从存储的类中提取某种值它,为了做到这一点,你可以做arena.variableInsideArenaName并使用它。

修改
看到班级划痕后,错误就会出现在这一行的某个地方DuelArenas arena : duelArenaStatus.keySet()