美文网首页
java基础类-4-enum

java基础类-4-enum

作者: 宠辱不惊的咸鱼 | 来源:发表于2019-10-01 09:14 被阅读0次

    概述

    • Java 1.5出现
    • 枚举出现之前,一般用static final int实现类似功能
      • 但缺陷在于:非作者对语义不明确,以及在类似于switch中无法检测异常值
    • 有一个自带静态方法values(),按照声明顺序返回枚举值
    • 枚举和普通的类一样,可以添加静态或非静态的属性和方法;但是,枚举值要放在最前面
    • 例子
    public enum SexEnum {
        WOMAN, MAN;
    }
    
    // 带参构造方法枚举
    public enum Mode implements IMode {
        PULLDOWN("上拉"), PULLUP("下拉");
        
        private final String value;
        private Mode(String value) {
            this.value = value;
        }
        public String getValue() {
            return value;
        }
    }
    

    本质分析

    public enum Color {
        RED, BLUE, BLACK, YELLOW, GREEN;
    }
    
    // Color.class:
    public final class enum_eddy.Color extends java.lang.Enum<enum_eddy.Color> {
        // 所有枚举值都是静态常量  
        public static final enum_eddy.Color RED;  
        public static final enum_eddy.Color BLUE;  
        public static final enum_eddy.Color BLACK;  
        public static final enum_eddy.Color YELLOW;  
        public static final enum_eddy.Color GREEN;
    
        // xxx
    }
    
    • 本质是final类,所以不能被继承
    • 只可以实现接口,其他啥也不行
    • 有构造器,属性和方法
      • 枚举的构造方法只在构造枚举值时被调
      • 构造方法是私有的
      • 所有枚举类都继承Enum

    方法

    • 枚举类的方法:其实就是Enum中定义的方法
    • ordinal():根据枚举值声明顺序返回整形值
      • Color.RED.ordinal(); // 0
      • Color.BLUE.ordinal(); // 1
    • compareTo():返回枚举值序号差
      • Color.RED.compareTo(Color.BLUE); // -1
    • values():返回全部枚举值的数组;这个方法未在Enum中定义,实际上是编译器添加的
    Color[] colors = Color.values();
    for(Color c : colors){
        System.out.print(c + ","); // RED,BLUE,BLACK,YELLOW,GREEN,
    }
    

    Enum类

    protected Enum(String name, int ordinal) {
        this.name = name;
        this.ordinal = ordinal;
    }
    
    public String toString() {
        return name;
    }
    

    相关文章

      网友评论

          本文标题:java基础类-4-enum

          本文链接:https://www.haomeiwen.com/subject/tvlkpctx.html