java 枚举类型知识点记录

 2023-09-05 阅读 74 评论 0

摘要:  在日常开发中,我们常用接口装常量或者在类里面写静态常量,java1.5以后加入了枚举类型enum。枚举类型是由一组固定的常量组成的类型。枚举本质是int值。因为枚举类型没有可以访问的构造器,所以枚举类型是真正的final。枚举的思想是:通过共有静

  在日常开发中,我们常用接口装常量或者在类里面写静态常量,java1.5以后加入了枚举类型enum。枚举类型是由一组固定的常量组成的类型。枚举本质是int值。因为枚举类型没有可以访问的构造器,所以枚举类型是真正的final。枚举的思想是:通过共有静态的final域为每个枚举常量导出实例类。enum实现了Serializable和Comparable接口。

  最简单的enum类如下:

  

1 public enum MyEnum {
2 
3     GREEN,BLUE,BLACK;
4 }

  常量用逗号分隔,用分号结束。

  enum有共有的方法name()和ordinal(),分别输出该常量的字符串名和枚举的序数。这个序数从0开始,是常量的位置,依次递增,所以这个值会跟随常量的位置而不同。所以这个方法不实用。一般需要定义自己的实例域。对以上代码改进如下:

  

1 public enum MyEnum {
2 
3     GREEN(1),BLUE(2),BLACK(3);
4     private MyEnum(int value){
5         
6     }
7 }
8     

  注意,enum只能定义default或者private的构造器。这就说明enum不允许手动实例化。每次调用枚举中的常量时候,实际内部调用了构造器,这就是 上面所说的通过常量生成实例

  枚举有values方法,可以返回当前枚举类的所有常量。方法如下:

  

 1 public enum MyEnum {
 2 
 3     GREEN(1),BLUE(2),BLACK(3);
 4     private MyEnum(int value){
 5         
 6     }
 7     
 8     public static void main(String[] args) {
 9         for (MyEnum myenum : MyEnum.values()) {
10             System.out.println(myenum.name());//GREEN BLUE BLACK
11         }
12     }
13 }

  那么,我们可以为自定义的枚举做一些功能,例如根据name查找我们自定义的参数。例如:

 1 public enum MyEnum {
 2 
 3     GREEN(1),BLUE(2),BLACK(3);
 4     private int value;
 5     private MyEnum(int value){
 6         this.value = value;
 7     }
 8     
 9     public static int getValue(String name){
10         for (MyEnum myenum : MyEnum.values()) {
11             if(myenum.name() == name){
12                 return myenum.value;
13             }
14         }
15         return 0;
16     }
17     
18     public static void main(String[] args) {
19         System.out.println(MyEnum.getValue(MyEnum.BLACK.name())+""); // 3
20     }
21 }

  还可以使用EnumSet放置枚举类型,生成枚举集合,EnumSet在java.util包中。并且实现了Collection和Serializable接口,继承了AbstractSet类,所以也实现了Set接口。示例如下:

  

1 public static void printColor(Set<MyEnum> colors){
2         for (MyEnum myEnum : colors) {
3             System.out.println(myEnum.name());
4         }
5     }
6     
7     public static void main(String[] args) {
8         MyEnum.printColor(EnumSet.of(MyEnum.BLACK,MyEnum.BLUE)); //BLUE BLACK
9 }

  枚举类型也提供了EnumMap类,它允许使用枚举作为它的键值,这样我们就能直接利用枚举存放map类型数据,而不用需要转换枚举类型到我们需要的数据了。EnumMap代码声明如下:

  public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V> implements java.io.Serializable, Cloneable

  从中看出key为枚举类型的。其中key值使用了泛型限制,使用extends Enum,保证了编译安全。

 

转载于:https://www.cnblogs.com/bigbang92/p/java-enum.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/1123.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息