Java 将反射应用于带有对象的switch语句

Java 将反射应用于带有对象的switch语句,java,reflection,switch-statement,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;

我试图对这个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);
    }
}
有没有关于如何使用反射的建议?

假设EnumArt和Art都是枚举,您不需要反射,只需使用enum API即可:

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


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

我正在尝试将反射应用于此switch语句。没有任何意义。请澄清。这里的反映在哪里?为什么你需要反思?你想做什么?我们想去掉switch语句。所以基本上是抛出包含所有情况的catch语句。@Bohemian不确定我们没有访问该类的权限。你可以判断它是否是枚举。只需打印Art.class.isEnum和EnumArt.class.isEnum即可找到答案。好的,我们知道Art确实有一个name方法。我们相信艺术和艺术都是艺术。这就是我们在应用解决方案时遇到的错误:错误测试:testCraftArtToNotchorg.bukkit.ArtTest:没有枚举常量net.minecraft.server.EnumArt.KEBABI添加了一个try-catch来模拟开关代码-试试看。您收到的错误表明EnumArt枚举没有烤肉串实例。我们已经尝试过此操作,但它返回的不是错误而是失败。查看测试会有帮助吗?您需要查看源代码并找出发生了什么。此外,您还需要确定测试的目的。如果您没有访问源代码的权限,那么测试该类是没有意义的,因为如果发现问题,您无法修复它。
public static EnumArt BukkitToNotch(Art art) {
    try {
        return EnumArt.valueOf(art.name()); 
    } catch (IllegalArgumentException ignore) 
         throw new AssertionError(art);
    }
}