将反射应用于使用对象切换语句

时间:2014-04-23 00:10:40

标签: java reflection switch-statement

我试图将反射应用于此switch语句。我能够找到的所有示例仅适用于字符串。在这种情况下"艺术"是一个对象。

    public static EnumArt BukkitToNotch(Art art) {

    switch (art) {
        case KEBAB: return EnumArt.KEBAB;
        case AZTEC: return EnumArt.AZTEC;
        case ALBAN: return EnumArt.ALBAN;
        case AZTEC2: return EnumArt.AZTEC2;
        case BOMB: return EnumArt.BOMB;
        case PLANT: return EnumArt.PLANT;
        case WASTELAND: return EnumArt.WASTELAND;
        case POOL: return EnumArt.POOL;
        case COURBET: return EnumArt.COURBET;
        case SEA: return EnumArt.SEA;
        case SUNSET: return EnumArt.SUNSET;
        case CREEBET: return EnumArt.CREEBET;
        case WANDERER: return EnumArt.WANDERER;
        case GRAHAM: return EnumArt.GRAHAM;
        case MATCH: return EnumArt.MATCH;
        case BUST: return EnumArt.BUST;
        case STAGE: return EnumArt.STAGE;
        case VOID: return EnumArt.VOID;
        case SKULL_AND_ROSES: return EnumArt.SKULL_AND_ROSES;
        case FIGHTERS: return EnumArt.FIGHTERS;
        case POINTER: return EnumArt.POINTER;
        case PIGSCENE: return EnumArt.PIGSCENE;
        case BURNINGSKULL: return EnumArt.BURNINGSKULL;
        case SKELETON: return EnumArt.SKELETON;
        case DONKEYKONG: return EnumArt.DONKEYKONG;
        case WITHER: return EnumArt.WITHER;
        default:
            throw new AssertionError(art);
    }
}

有关如何使用反射执行此操作的任何建议吗?

1 个答案:

答案 0 :(得分:0)

假设EnumArtArt都是enums您不需要反思,只需使用enum API:

public static EnumArt BukkitToNotch(Art art) {
    try {
        return EnumArt.valueOf(art.name()); 
    } catch (IllegalArgumentException ignore) 
         throw new AssertionError(art);
    }
}

如果Art不是枚举,请使用任何String属性来匹配名称。

如果两者都不是枚举,则应将它们转换为枚举。