Java中的典型场景
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
典型场景
以上枚举用法是最简单的实际中枚举经常会有关联的实例变量和方法。比如上面的Size例子每个枚举值可能有关联的缩写和中文名称可能需要静态方法根据缩写返回对应的枚举值修改后的Size代码如代码清单5-13所示。
代码清单5-13 带有实例变量和方法的枚举类Size
public enum Size {
SMALL("S","小号"),
MEDIUM("M","中号"),
LARGE("L","大号");
private String abbr;
private String title;
private Size(String abbr, String title){
this.abbr = abbr;
this.title = title;
}
public String getAbbr() {
return abbr;
}
public String getTitle() {
return title;
}
public static Size fromAbbr(String abbr){
for(Size size : Size.values()){
if(size.getAbbr().equals(abbr)){
return size;
}
}
return null;
}
}
上述代码定义了两个实例变量abbr和title以及对应的get方法分别表示缩写和中文名称定义了一个私有构造方法接受缩写和中文名称每个枚举值在定义的时候都传递了对应的值同时定义了一个静态方法fromAbbr根据缩写返回对应的枚举值。需要说明的是枚举值的定义需要放在最上面枚举值写完之后要以分号结尾然后才能写其他代码。
这个枚举定义的使用与其他类类似比如
Size s = Size.MEDIUM;
System.out.println(s.getAbbr()); //输出M
s = Size.fromAbbr("L");
System.out.println(s.getTitle()); //输出“大号”
加了实例变量和方法后枚举转换后的类与代码清单5-12类似只是增加了对应的变量和方法修改了构造方法代码不同之处大概如代码清单5-14所示。
代码清单5-14 增加了实例变量和方法后的枚举类Size对应的普通类示意代码
public final class Size extends Enum<Size> {
public static final Size SMALL = new Size("SMALL",0, "S", "小号");
public static final Size MEDIUM = new Size("MEDIUM",1,"M","中号");
public static final Size LARGE = new Size("LARGE",2,"L","大号");
private String abbr;
private String title;
private Size(String name, int ordinal, String abbr, String title){
super(name, ordinal);
this.abbr = abbr;
this.title = title;
}
//其他代码
}
每个枚举值经常有一个关联的标识符id通常用int整数表示使用整数可以节约存储空间减少网络传输。一个自然的想法是使用枚举中自带的ordinal值但ordinal值并不是一个好的选择。为什么呢因为ordinal值会随着枚举值在定义中的位置变化而变化但一般来说我们希望id值和枚举值的关系保持不变尤其是表示枚举值的id已经保存在了很多地方的时候。比如上面的Size例子Size.SMALL的ordinal值为0我们希望0表示的就是Size.SMALL但如果增加一个表示超小的值XSMALL
public enum Size {
XSMALL, SMALL, MEDIUM, LARGE
}
这时0就表示XSMALL了。所以一般是增加一个实例变量表示id。使用实例变量的另一个好处是id可以自己定义。比如Size例子可以写为
public enum Size {
XSMALL(10), SMALL(20), MEDIUM(30), LARGE(40);
private int id;
private Size(int id){
this.id = id;
}
public int getId() {
return id;
}
}
枚举还有一些高级用法比如每个枚举值可以有关联的类定义体枚举类型可以声明抽象方法每个枚举值中可以实现该方法也可以重写枚举类型的其他方法。此外枚举可以实现接口也可以在接口中定义枚举其使用相对较少我们就不介绍了。
至此关于枚举我们就介绍完了对于枚举类型的数据虽然直接使用类也可以处理但枚举类型更为简洁、安全和方便。
https://www.bilibili.com/video/BV13G4y1T79d/?spm_id_from=333.999.0.0