switch 结合 枚举使用

本文介绍如何在Java中结合使用枚举与switch语句,包括定义枚举类、使用枚举作为switch条件以及如何将非枚举类型的参数转换为枚举类型进行switch操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

switch 结合枚举使用

一般枚举的格式是,枚举类.枚举类型,使用 switch 的要义在于,case 枚举类型,而不是 case 枚举类.枚举类型

定义一个枚举类
public enum TestEnum {
	TEST_ONE("name1","one"),//枚举类型
	TEST_TWO("name2","two");//枚举类型
	private String key;
	private String value;
	
	private TestEnum(String key,String value){
		this.key=key;
		this.value=value;
	}

	public String getKey() {
		return key;
	}
	public String getValue() {
		return value;
	}
	@Override
	public String toString() {
		return "[key="+key+";value="+value+"]";
	}
	
}
switch 结合 枚举类型举例
public static void main(String[] args) {
		//声明一个枚举类型
		TestEnum t=TestEnum.TEST_ONE;
		
		//将枚举类型传入 switch 做为条件判断依据
		switch(t){
			case TEST_ONE://这里是关键点,TestEnum.TEST_ONE 只需写 TEST_ONE
				System.out.println("one");
				break;
			case TEST_TWO:
				System.out.println("two");
				break;
			default:
				break;
		}
	}
运行结果
one
连续 case 没有 break 等同于 or
public static void test1(int i){
		switch (i){
		case 0:
		case 1:
			System.out.println("a");
			break;
		}
	}
	
	@Test
	public void test2(){
		test2(0);
	}

结果:

a
最佳实践——没有枚举制造枚举

如果你的程序中充满了 ifelse语句,那么是时候展现真正的技术了,就是使用本文枚举结合 switch 的方法,代码逻辑一下子就清晰了,可以有时候我们会遇到什么问题呢?入参不是枚举类型,没法直接结合,so本文介绍一个方法,就是将非枚举类型入参转化为枚举类型入参

  • 将入参 value 转化为对应的 枚举类型
/**
	 * 将入参 value 转化为对应的 枚举类型
	 * @param caseValue
	 * @return
	 */
	 @SuppressWarnings("unused")
	private static TestEnum getTestEnumByValue(String caseValue){
		 TestEnum[] testEnumArrays=TestEnum.values();
			for(int i=0;i<testEnumArrays.length;i++){
				if(testEnumArrays[i].getValue().equals(caseValue)){
					return testEnumArrays[i];
				}
			}
			return null;
		}
  • 将入参 key 转化为对应的 枚举类型
	 /**
		 * 将入参 key 转化为对应的 枚举类型
		 * @param caseKey
		 * @return
		 */
		 @SuppressWarnings("unused")
	 private static TestEnum getTestEnumByKey(String caseKey){
		 TestEnum[] testEnumArrays=TestEnum.values();
			for(int i=0;i<testEnumArrays.length;i++){
				if(testEnumArrays[i].getKey().equals(caseKey)){
					return testEnumArrays[i];
				}
			}
			return null;
		}
  • 测试方法
public static void main(String[] args) {
		 //以 value 值 获取 枚举类型
		String caseValue="one";
		TestEnum testEnumValue=getTestEnumByValue(caseValue);
		if(testEnumValue!=null){
			System.out.println(testEnumValue.toString());
		}
		
		 //以 key 值 获取 枚举类型
		String caseKey="name1";
		TestEnum testEnumKey=getTestEnumByKey(caseKey);
		if(testEnumKey!=null){
			System.out.println(testEnumKey.toString());
		}
	}
  • 测试结果
[key=name1;value=one]
[key=name1;value=one]
在JDK1.5 之前,我们定义常量都是: publicstaticfianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。 enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (color) { case RED: color = Signal.GREEN; break ; case YELLOW: color = Signal.RED; break ; case GREEN: color = Signal.YELLOW; break ; } } } 用法三:向枚举中添加新方法 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum实例。 public enum Color { RED("红色" , 1 ), GREEN( "绿色" , 2 ), BLANK( "白色" , 3 ), YELLO( "黄色" , 4 ); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this .name = name; this .index = index; } // 普通方法 public static String getName( int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } return null ; } // get set 方法 public String getName() { return name; } public void setName(String name) { this .name = name; } public int getIndex() { return index; } public void setIndex( int index) { this .index = index; } } 用法四:覆盖枚举的方法 下面给出一个toString()方法覆盖的例子。 public enum Color { RED("红色" , 1 ), GREEN( "绿色" , 2 ), BLANK( "白色" , 3 ), YELLO( "黄色" , 4 ); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this .name = name; this .index = index; } //覆盖方法 @Override public String toString() { return this .index+ "_" + this .name; } } 用法五:实现接口 所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。 public interface Behaviour { void print(); String getInfo(); } public enum Color implements Behaviour{ RED("红色" , 1 ), GREEN( "绿色" , 2 ), BLANK( "白色" , 3 ), YELLO( "黄色" , 4 ); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this .name = name; this .index = index; } //接口方法 @Override public String getInfo() { return this .name; } //接口方法 @Override public void print() { System.out.println(this .index+ ":" + this .name); } } 用法六:使用接口组织枚举 public interface Food { enum Coffee implements Food{ BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO } enum Dessert implements Food{ FRUIT, CAKE, GELATO } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值