Java 将反射应用于带有对象的switch语句
我试图对这个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;
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);
}
}