使用 switch 时碰到的一个坑
文章目录
首先看一段程序。
int type=2;
switch (type){
case 1:
System.out.print(1);
case 2:
System.out.print(2);
case 3:
System.out.print(3);
}
踩过这个坑或者仔细看过 switch 语法的人都知道,上面的程序会打印出:23 ,而不是 2。因为 switch 语句会从相匹配的 case 开始执行,直到遇到 break 语句,或者执行整一个 switch 语句。如果没加 break ,则会将 2 和 3 的 case 都执行,而不是只执行匹配的 case ,所以在使用 switch 时,一定要注意加 break ,或者在 case 里 return,否则很容易出现程序错误。
在编程时,我们可以通过一些插件来提醒我们这些的错误的发生,例如 SonarLint 、Alibaba Java Coding Guidelines。
有时候,我们也可以通过多态避免 switch 的使用,例如:
//定义一个接口
public interface Person {
void doSomeThing();
}
// 实现类
public class Student implements Person{
@Override
public void doSomeThing() {
System.out.println("Student");
}
}
public class Teacher implements Person{
@Override
public void doSomeThing() {
System.out.println("Teacher");
}
}
// 辅助类
public class PersonManager {
final static Map<Integer,Person> personMap=new ConcurrentHashMap<>();
static {
personMap.put(1,new Student());
personMap.put(2,new Teacher());
}
public static Person getPerson(int i){
return personMap.get(i);
}
}
//使用
public static void main(String[] args) {
Person p=PersonManager.getPerson(2);
p.doSomeThing();
}
文章作者 梧桐碎梦
上次更新 2022-09-14 22:23:30