zoukankan      html  css  js  c++  java
  • Java枚举知识点

    近几天从单例模式及阿里开发手册中遇到枚举,之前没怎么关注过。

    便学习一下,此次看了多方资料,并写Demo实现,记录下知识点,方便之后巩固。


    枚举的两个优点:

    1. 保证了类型安全:调用者无法随意传一个 int或者String 等值;

    2. 代码可读性非常高;

    举个例子:

     1 package com.wzf.study03.test03;
     2 
     3 enum LangEnum {
     4     JAVA, JS, PYTHON
     5 }
     6 
     7 public class EnumDemo1 {
     8     public static void main(String[] args) {
     9         LangEnum lan = LangEnum.JAVA;
    10         switch (lan){
    11             case JS:
    12                 System.out.println("JS");
    13                 break;
    14             case JAVA:
    15                 System.out.println("JAVA");
    16                 break;
    17             case PYTHON:
    18                 System.out.println("PYTHON");
    19                 break;
    20             default:
    21         }
    22     }
    23 }

    这是枚举常用的方法,根据业务整理稳定的数据集,写成枚举。便于读取理解,并可以用作判断。


    理解枚举

    枚举也是个class类,可以在类内/外定义。

    特性:

    1,不可在方法内定义。

    2.它不能有public的构造函数,以保证私有,无法手动创建实例。 

    3,枚举不能在继承其它类了,因为它默认继承了java.lang.Enum 

    4.  常量值地址唯一,可以用==直接对比,性能会有提高. 

    5,Enum的values方法,可方便的遍历所有的枚举值。 

    6.Enum的oridinal方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定。

    package com.wzf.study03.test03;
    
    /**
     * @author wzf
     * @date 2019/7/26
     */
    public enum LanguageEnum {
    
        /**  JAVA */
        JAVA(1,"JAVA"),
        /**  JS */
        JS(2,"JS"),
        /** PYTHON */
        PYTHON(3,"PYTHON");
    
        /** 我们可以理解成
         * public static final LanguageEnum JAVA = new LanguageEnum(1,"JAVA");
         * public static final LanguageEnum JS = new LanguageEnum(2,"JS");
         * public static final LanguageEnum PYTHON = new LanguageEnum(3,"PYTHON");
         * 每个元素为静态不可变的实例对象,那下面就很好理解了
         */
        private Integer num;
        private String type;
    
        LanguageEnum(Integer i, String type) {
            this.num = i;
            this.type = type;
        }
    
        /**
         * 根据类型返回枚举实例
         */
        public static LanguageEnum getEnumByType(String type){
            for (LanguageEnum language : LanguageEnum.values()) {
                if(type.equals(language.type)){
                    return  language;
                }
            }
            return null;
        }
    
        public Integer getNum() {   return num;  }
        public void setNum(Integer num) {  this.num = num;  }
        public String getType() {  return type;  }
        public void setType(String type) {  this.type = type;   }
    }

    贴个阿里开发手册关于枚举的截图:

    ps:单例模式有个枚举实现的方式很好,有时间跟大家分享。

  • 相关阅读:
    linux 杂类
    set
    C++ 基础 杂类
    linux 添加samba账户
    git 常用命令
    git 设置bitbucket 邮箱、用户
    C++ shared_ptr
    git 免密码配置
    2014的新目标
    为/Date(1332919782070)/转时间2013-09-23
  • 原文地址:https://www.cnblogs.com/hero123/p/11251489.html
Copyright © 2011-2022 走看看