gpt4 book ai didi

java - switch 语句在这里是否合适,采用枚举?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:08 25 4
gpt4 key购买 nike

今天我用 Java 制作了一个俄罗斯方 block 克隆体,当需要实现 block 生成机制时,我编写了这个采用枚举的 switch 语句。我被告知要尽可能避免使用 switch 语句,但我不确定是否可以在这里避免使用 switch 语句,除非我彻底修改我最初的基于继承的设计选择。

为了实现不同类型的 block ,我决定制作一个名为 Block 的抽象父类(super class),并为每种特定类型制作一个子类。我还制作了一个标记 block 类型的枚举。例如,一个 ZBlock extends Block 对象会将 Type.ZBlock 枚举分配给它的 Type 字段变量。

private void spawnBlock(Type type){
switch(type){
case I:
currentBlock = new IBlock();
break;
case L:
currentBlock = new LBlock();
break;
case J:
currentBlock = new JBlock();
break;
case Z:
currentBlock = new ZBlock();
break;
case S:
currentBlock = new SBlock();
break;
case T:
currentBlock = new TBlock();
break;
default:
currentBlock = new OBlock();
}
}

当我开始考虑在这里不使用 switch 语句的方法时,除了摆脱我所有的子类并在单个非抽象 Block 类中对不同 block 的行为进行编程外,我想不出其他任何事情.但它可能会变得一团糟,因为不同的 block 具有不同的形状和踢墙数据。那么 switch 语句在这里是一个不错的选择吗?如果没有,我该如何改进我的代码,为什么?

最佳答案

Switch 比使用 if-else 语句更好。在我看来,这是更简洁的代码。只需将它与使用 if-else 的相同代码进行比较:

private void spawnBlock(Type type){
if(Type.I.equals(type)) {
currentBlock = new IBlock();
} else if(Type.L.equals(type)) {
currentBlock = new LBlock();
} else if(Type.J.equals(type)) {
currentBlock = new JBlock();
} else if(Type.Z.equals(type)) {
currentBlock = new ZBlock();
} else if(Type.S.equals(type)) {
currentBlock = new SBlock();
} else if(Type.T.equals(type)) {
currentBlock = new TBlock();
} else {
currentBlock = new OBlock();
}
}

但通常您有机会使用与 switch 或 if-else 不同的方法。看看其他答案或看看this .它解释了如何使用枚举改进代码并将逻辑直接放入枚举中。

关于java - switch 语句在这里是否合适,采用枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57585753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com