您好我正在使用Bukkit为游戏Minecraft编写插件。基本上当玩家右键点击鸡蛋时,鸡蛋具有特定的耐久性。耐久性根本不会改变,因为每次有人做这个事件和个人时都会调用事件。我目前的代码没有完成,但基本上就是这样:
if (e.getItem().getTypeId() == 383) {
if (!worldguardPlugin.canBuild(e.getPlayer(), loc)) {
e.setCancelled(true);
e.getPlayer().sendMessage(
ChatColor.YELLOW
+ "You cant use spawner eggs in this region!");
return;
}
switch (e.getItem().getDurability()) {
case 2:
expOrb(e);
break;
case 9:
painting(e);
break;
case 20:
primedTnt(e);
break;
case 40:
minecart(e);
break;
case 41:
boat(e);
break;
case 50:
creeper(e);
break;
case 51:
skeleton(e);
break;
case 52:
spider(e);
break;
case 53:
giant(e);
break;
case 54:
zombie(e);
break;
case 55:
slime(e);
break;
case 56:
ghast(e);
break;
case 57:
pigman(e);
break;
case 58:
enderman(e);
break;
case 59:
cavespider(e);
break;
case 60:
silverfish(e);
break;
case 61:
blaze(e);
break;
case 62:
cube(e);
break;
case 63:
dragon(e);
break;
case 90:
pig(e);
break;
case 91:
sheep(e);
break;
case 92:
cow(e);
break;
case 93:
chicken(e);
break;
case 94:
squid(e);
break;
case 95:
wolf(e);
break;
case 96:
moosh(e);
break;
case 97:
snowGolem(e);
break;
case 98:
ocelot(e);
break;
case 99:
ironGolem(e);
break;
case 120:
villager(e);
break;
case 200:
crystal(e);
break;
default:
break;
}
}
}
由于我正在使用break,我所做的所有方法都不会被正确调用?这将导致许多无意义的代码被执行并浪费性能,而这个设计的全部意义在于更好的工作流程。
答案 0 :(得分:2)
你的假设是正确的。只会执行符合特定switch
案例的代码。毕竟,switch语句可以替代巨大的if-else if-else
块。
答案 1 :(得分:2)
在您的情况下,由于中断,仅执行与切换语句特别匹配的项。如果没有休息,则会调用第一个匹配,然后调用ALL。例如,代码:
System.out.println("starting");
int i = 2;
switch (i) {
case 1:
System.out.println(1);
case 2:
System.out.println(2);
case 3:
System.out.println(3);
}
System.out.println("finished");
产生以下输出:
starting
2
3
finished
答案 2 :(得分:0)
低效率是您需要检查所有情况的地方,除非您到达最后的情况,例如在这种情况下为200。您需要重新组织决策制定流程,以便在更频繁的案例中至少运行得更快。尽管switch语句是由编译器优化的,但是如果有太多的东西需要比较,那么它就无法做很多事情。
从switch语句的角度来看,你是对的:如果它到达break语句就会短路。