Enumeration

 
  1. public class TestEnumeration{
  2.     public static void main(String... args){
  3.         Season s = Season.SPRING;
  4.         //System.out.println(Season.SPRING==Season.SUMMER);
  5.         
  6.         Season[] ss = Season.values();
  7.         for(int i=0; i<ss.length; i++){
  8.             System.out.print(ss[i] + "---" + ss[i].ordinal() + " " + ss[i].name());
  9.             ss[i].sport();
  10.         }
  11.         Season s2 = Enum.valueOf(Season.class,"SUMMER");
  12.         System.out.println(s2.ordinal());
  13.     }
  14. }
  15. /*
  16. class Season{
  17.     private Season(){}
  18.     public static final Season SPRING = new Season();
  19.     public static final Season SUMMER = new Season();
  20.     public static final Season AUTUMN = new Season();
  21.     public static final Season WINTER = new Season();
  22. }
  23. */
  24. /*
  25. enum Season{
  26.     SPRING,SUMMER,AUTUMN,WINTER;
  27. }
  28. */
  29. /*
  30. enum Season{    
  31.     SPRING("春"),
  32.     SUMMER("夏"),
  33.     AUTUMN("秋"),
  34.     WINTER("冬");
  35.     private String name;
  36.     private Season(String name){
  37.         this.name = name;
  38.     }
  39.     public String toString(){
  40.         return name;
  41.     }
  42. }
  43. */
  44. //enum A extends Object{AB,CD;} //Error
  45. //class B extends A{} //Error
  46. interface IA{}
  47. enum A implements IA{AB,CD;}
  48. enum Season{    
  49.     SPRING("春"){
  50.         public void sport(){
  51.             System.out.println("放风筝");
  52.         }
  53.     },
  54.     SUMMER("夏"){
  55.         public void sport(){
  56.             System.out.println("游泳");
  57.         }
  58.     },
  59.     AUTUMN("秋"){
  60.         public void sport(){
  61.             System.out.println("野炊");
  62.         }
  63.     },
  64.     WINTER("冬"){
  65.         public void sport(){
  66.             System.out.println("滑冰");
  67.         }
  68.     };
  69.     private String name;
  70.     private Season(String name){
  71.         this.name = name;
  72.     }
  73.     public String toString(){
  74.         return name;
  75.     }
  76.     public abstract void sport();
  77. }
    1. public class TestEnumeration2{
    2.     public static void main(String... args){
    3.         Calculator[] cal = Calculator.values();
    4.         for(int i=0; i<cal.length; i++){
    5.             System.out.print(cal[i] + ": ");
    6.             System.out.println(cal[i].calculate(6,3));
    7.         }
    8.     }
    9. }
    10. enum Calculator{
    11.     ADD(){
    12.         public int calculate(int a,int b){
    13.             return a+b;
    14.         }
    15.     },
    16.     MINUS(){
    17.         public int calculate(int a,int b){
    18.             return a-b;
    19.         }
    20.     },
    21.     MULTIPLY(){
    22.         public int calculate(int a,int b){
    23.             return a*b;
    24.         }
    25.     },
    26.     DIVIDE(){
    27.         public int calculate(int a,int b){
    28.             return a/b;
    29.         }
    30.     };
    31.     private Calculator(){}
    32.     public abstract int calculate(int a,int b);
    33. }
枚举(Enumeration)是一种用户定义的数据类型,其值被限制为一组命名常量。这些命名常量通常表示一组相关的整型常量,称为枚举的底层类型[^1]。枚举的主要目的是提高代码的可读性和可维护性,通过使用有意义的名称代替原始的数值,使得开发者能够更清晰地表达程序的意图。 ### 枚举在编程中的应用 枚举广泛应用于各种编程语言中,用于表示固定集合的状态或行为。例如,在状态机中,枚举可以用来表示不同的状态;在选项设置中,枚举可以表示不同的配置选项等。 #### 未限定作用域的枚举 早期C++版本中广泛使用的是未限定作用域的枚举,这种枚举的成员可以直接通过名字访问,而不需要通过枚举类型的名称来限定。然而,这种方式可能导致命名冲突,尤其是在大型项目中,不同模块可能定义了相同名称的枚举成员。因此,在现代C++中,推荐使用限定作用域的枚举以避免此类问题[^1]。 #### 限定作用域的枚举 限定作用域的枚举要求必须通过枚举类型的名称来访问其成员,这样可以有效防止命名冲突,并增强代码的清晰度和安全性。这是当前推荐使用的枚举形式,特别是在新开发的项目中。 #### 泛型枚举的应用场景 泛型枚举允许在一个枚举类型中包含多个相关的枚举类型,这类似于一个容器,可以装入不同类型的枚举。这样的设计有助于简化代码结构,使开发者能够在单一的枚举类型中处理多种相关但不同的数据类型。比如,在一个商店促销活动中,可以通过泛型枚举来整合不同的优惠类型,如折扣、满减、赠品等,从而方便进行组合和操作[^2]。 #### C# 中的枚举实现 在 C# 中,当需要处理字节范围(0 到 255)内的有限范围值时,可以选择字节作为枚举的基本类型。这样做可以在内存效率方面带来显著的优势,尤其是对于那些存在大量枚举变量或者对内存使用有严格要求的应用场景,如嵌入式系统或低级编程环境[^3]。 #### Rust 的模式匹配与枚举 Rust 编程语言中的枚举类型结合模式匹配功能,提供了一种强大的机制来处理复杂的数据结构和逻辑分支。通过模式匹配,开发者可以根据输入的不同情况执行相应的代码块,这对于构建健壮且高效的函数式编程模型非常有用。此外,Rust 的枚举还支持关联数据,这意味着每个枚举变体都可以携带不同类型和数量的数据,进一步增强了其灵活性和实用性[^4]。 以下是 C++ 中限定作用域枚举的一个简单示例: ```cpp enum class Color { Red, Green, Blue }; int main() { Color c = Color::Red; return 0; } ``` 在这个例子中,`Color` 是一个限定作用域的枚举类型,它的成员只能通过 `Color::` 前缀来访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值