Java学习笔记(44)——Java枚举

Wesley13
• 阅读 718

一、枚举在Switch中的应用

public enum MyColor{
   //每个枚举值用逗号隔开,
   RED,
   BLUE,
   GREEN;//最后的分号可要或不要
}

public class Test1{
    public static void main(String[] args){
        MyColor myColor = MyColor.RED;
        switch(myColor){
            case BLUE://这里就可以直接使用枚举值
                System.out.println("蓝色");
                break;
            case GREEN:
                System.out.println("绿色");
                break;
            case RED:
                System.out.println("红色");
                break;
            default:
                System.out.println("什么色?");
                break;    
        }
    }
}

二、枚举的构造函数

enum MyColor{
  RED("Hot", 4), BLUE("SAD",8);
  
  private String mood;
  public String getMood{
    return mood;
  }
  private int index;
  public int getIndex(){
    return index;
  }
  private MyColor(String mood, int index){
    this.mood = mood;
    this.index = index;
  }
}
System.out.println(MyColor.RED.getMood());

枚举成员均要实现构造函数

三、枚举的抽象方法

/**
    * 订单状态
    * 
    * 实现带有抽象方法的枚举
    * 
    * @author wang
    *
    */
    public enum OrderState {
        /** 已取消 */
        CANCEL {public String getName(){return "已取消";}},
        /** 待审核 */
        WAITCONFIRM {public String getName(){return "待审核";}},
        /** 等待付款 */
        WAITPAYMENT {public String getName(){return "等待付款";}},
        /** 正在配货 */
        ADMEASUREPRODUCT {public String getName(){return "正在配货";}},
        /** 等待发货 */
        WAITDELIVER {public String getName(){return "等待发货";}},
        /** 已发货 */
        DELIVERED {public String getName(){return "已发货";}},
        /** 已收货 */
        RECEIVED {public String getName(){return "已收货";}};
        
        public abstract String getName();
    }

枚举成员均要实现抽象方法

四、枚举实现接口

package yuki.core.enumeration.interfaces;

import java.util.Arrays;
import java.util.List;

public class PlanetTest {
    
    private interface Move{
        void move();
    };
    
    private enum Planet implements Move{
        SOLAR, 
        EARTH{
            @Override
            public void move() {
                System.out.println("rounding...center:" + SOLAR);
            }
        }, 
        MOON{
            @Override
            public void move() {
                System.out.println("rounding...center:" + EARTH);
            }
        };
        
        @Override
        public void move() {
            System.out.println("rounding...");
        }
    }

    public static void main(String[] args) {
        
        List<Planet> planets = Arrays.asList(Planet.values());
        for(Planet planet : planets){
            System.out.print(planet + " : ");
            planet.move();
        }
    }

}

SOLAR : rounding...
EARTH : rounding...center:SOLAR
MOON : rounding...center:EARTH

枚举成员均要实现接口方法,可单独实现,亦可统一实现~

五、枚举常用方法

int **compareTo**(E o) 
          比较此枚举与指定对象的顺序。

Class<E> **getDeclaringClass**() 
          返回与此枚举常量的枚举类型相对应的 Class 对象。

String **name**() 
          返回此枚举常量的名称,在其枚举声明中对其进行声明。

int **ordinal**() 
          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String **toString**()

          返回枚举常量的名称,它包含在声明中。

static `<T extends Enum<T>> T` **valueOf**(Class<T> enumType, String name) 
          返回带指定名称的指定枚举类型的枚举常量。

六、EnumSet,EnumMap 的应用

public class Test {
    public static void main(String[] args) {
        // EnumSet的使用
        EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);
        for (EnumTest day : weekSet) {
            System.out.println(day);
        }
 
        // EnumMap的使用
        EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class);
        weekMap.put(EnumTest.MON, "星期一");
        weekMap.put(EnumTest.TUE, "星期二");
        // ... ...
        for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
            Entry<EnumTest, String> entry = iter.next();
            System.out.println(entry.getKey().name() + ":" + entry.getValue());
        }
    }
}

七、覆盖枚举的方法

public enum Color {  
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
    // 成员变量  
    private String name;  
    private int index;  
    // 构造方法  
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
    //覆盖方法  
    @Override  
    public String toString() {  
        return this.index+"_"+this.name;  
    }  
}

八、让相同枚举类型下的枚举值具有不同的行为--重写枚举值的方法

public enum MyColor{
  RED, BLUE(){
     @Override
     public boolean getFlag(){
       return false;
     }
  };
  public boolean getFlag(){
    return true;
  }
}
// 调用
System.out.println(MyColor.RED.getFlag()); // 显示true
System.out.println(MyColor.BLUE.getFlag()); // 显示false
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java枚举使用场景
用法一:常量Java代码 1publicenumColor{2RED,GREEN,BLANK,YELLOW3}用法二:switchJDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。Java
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
Java枚举使用详解
package com.ljq.test;/  枚举用法详解     /public class TestEnum {    /      普通枚举           /    public enum Col
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这