• 枚举(三)深入了解枚举


    7.自定义枚举的构造方法

    枚举类型不能用public和protected修饰构造方法,所以枚举对象无法在测试类中直接调用其构造方法来初始化。

     1 enum Color{
     2     RED("红色",4),GREEN("绿色",5),BLUE("蓝色",6);//有参构造方法实例化对象
     3     private String name;
     4     private int index;
     5     private Color(String name,int index)//两参构造方法
     6     {
     7         this.name=name;
     8         this.index=index;
     9     }
    10     public static String getName(int index)//普通方法
    11     {
    12         for(Color c:Color.values())
    13         {
    14             if(c.getIndex()==index)
    15             {
    16                 return c.name;
    17             }
    18         }
    19         return null;
    20     }
    21     public String getName()
    22     {
    23         return name;
    24     }
    25     public static void setName(int index,String name)
    26     {
    27         for(Color c:Color.values())
    28         {
    29             if(c.getIndex()==index)
    30             {
    31                 c.name=name;
    32                 return;
    33             }
    34         }
    35     }
    36     public int getIndex()
    37     {
    38         return index;
    39     }
    40     public static void setIndex(int index,String name)
    41     {
    42         for(Color c:Color.values())
    43         {
    44             if(c.getName()==name)
    45             {
    46                 c.index=index;
    47                 return;
    48             }
    49         }
    50     }
    51 };
    52 public class DeepEnum
    53 {
    54     public static void main(String[] args)
    55     {
    56         System.out.println("原来的颜色和编号:");
    57         System.out.println(Color.RED.getIndex()+"-->"+Color.RED.getName());
    58         System.out.println(Color.GREEN.getIndex()+"-->"+Color.GREEN.getName());
    59         System.out.println(Color.BLUE.getIndex()+"-->"+Color.BLUE.getName());
    60         System.out.println("自定义后的颜色和编号:");
    61         Color.setName(4,"黑色");//重新设置名称
    62         System.out.println("4-->"+Color.getName(4));
    63         Color.setIndex(7, "黑色");//重新设置索引编号
    64         System.out.println("7-->"+Color.getName(7));
    65     }
    66 }

    上述例子定义了Color类的构造方法和四个普通方法,通过对方法的调用实现了对枚举对象的属性进行赋值和修改。

    有几点需要注意:(1)、枚举类定义的对象必须出现在该类的第一行。

                       (2)、一旦定义了枚举类的构造方法,那么所以的枚举对象都必须显示调用此构造方法。

                       (3)、可以通过“枚举类名.对象名.方法名”调用方法得到对象的属性。

                       (4)、可以通过“枚举类名.方法名”调用方法设置对象的属性。

    8.枚举的接口

    枚举和普通类一样,可以实现一个或多个接口。当一个枚举实现一个接口之后,各个枚举对象都必须分别实现接口中的抽象方法。

     1 interface ColorInterface
     2 {
     3     public String getColor();
     4 }
     5 enum Color implements ColorInterface
     6 {
     7     红色
     8     {
     9         public String getColor()
    10         {
    11             return "RED";
    12         }
    13     },
    14     绿色
    15     {
    16         public String getColor()
    17         {
    18             return "GREEN";
    19         }
    20     },
    21     蓝色
    22     {
    23         public String getColor()
    24         {
    25             return "BLUE";
    26         }
    27     };
    28 }
    29 public class DeepEnum
    30 {
    31     public static void main(String[] args)
    32     {
    33         for(Color c:Color.values())
    34         {
    35             System.out.println(c.ordinal()+"-->"+c.name()+":"+c.getColor());
    36         }
    37     }
    38 }

    第6—27行,就是一条复合的大语句,本质上是一条语句。

    9.枚举中定义抽象方法

    上述7和8中为枚举对象的属性和编号赋值还可以有第三种方法,那便是在枚举中直接定义抽象方法。

     1 enum Color
     2 {
     3     红色
     4     {
     5         public String getColor()
     6         {
     7             return "RED";
     8         }
     9     },
    10     绿色
    11     {
    12         public String getColor()
    13         {
    14             return "GREEN";
    15         }
    16     },
    17     蓝色
    18     {
    19         public String getColor()
    20         {
    21             return "BLUE";
    22         }
    23     };
    24     public abstract String getColor();//枚举中的抽象方法
    25 }
    26 public class DeepEnum
    27 {
    28     public static void main(String[] args)
    29     {
    30         for(Color c:Color.values())
    31         {
    32             System.out.println(c.ordinal()+"-->"+c.name()+":"+c.getColor());
    33         }
    34     }
    35 }

    10.枚举类不可以被继承

    在枚举类内部可以定义一个或多个抽象方法,但枚举类不能用abstract修饰,只能在每个枚举的实例实现抽象方法。

  • 相关阅读:
    https://github.com/zyq025/DotNetCoreStudyDemo/blob/main/HttpClientConsoleDemo/Program.cs
    NETCORE TASK多线程的使用
    .NetCore简单封装基于IHttpClientFactory的HttpClient请求
    Netcore中简单使用MemoryCache
    LinQ To Object 基本用法
    SelectMany 和 Select的区别
    List 转换成字符串
    【转】C#中enum的总结
    发个服务端包裹返回值的Response类和用法
    微软企业库 Microsoft Enterprise Library
  • 原文地址:https://www.cnblogs.com/wxywxy/p/6773621.html
Copyright © 2020-2023  润新知