zoukankan      html  css  js  c++  java
  • Enum的简单了解

    Enum可以将一组具名的有限集合创建成一种新的类型,而这些具名的值可以作为常规的程序组件使用。

    在创建enum时,编译器会为你生成一个相关的类,这个类继承自java.lang.Enum,所以enum本身也是一个类。

    package myenums;
    
    public enum Color {
    	RED,
    	ORANGE,
    	YELLOW,
    	GREEN,
    	BLUE,
    	PURPLE
    }
    package myenums;
    
    public enum Day {
        SUNDAY, 
    	MONDAY, 
    	TUESDAY, 
    	WEDNESDAY,
        THURSDAY, 
    	FRIDAY, 
    	SATURDAY 
    }


    enum中所有的枚举值,都是这个类静态常量。

    可以使用==来比较enum实例,编译器会自动为你提供equals和hashCode方法。

    package me.benzeph.myenums;
    
    import org.junit.Test;
    
    import static myenums.Color.BLUE;
    import static myenums.Color.RED;
    import static myenums.Day.MONDAY;
    import static myenums.Day.THURSDAY;
    import static org.hamcrest.core.Is.is;
    import static org.junit.Assert.assertFalse;
    import static org.junit.Assert.assertThat;
    
    public class MyEnumTest {
    	@Test
    	public void shouldReturnTrue() {
    		assertFalse(MONDAY == THURSDAY);
    		assertFalse(BLUE == RED);
    		assertThat(BLUE, is(BLUE));
    	}
    }


    除了不能继承一个enum,基本可以将enum看做一个常规的类。

    如果打算在enum中定义自己的方法,必须在enum实例序列的最后添加一个分号,同时必须先定义一个enum实例(在方法之前)。

    package myenums;
    
    public enum Color {
    	RED("red"),
    	ORANGE("orange"),
    	YELLOW("yellow"),
    	GREEN("green"),
    	BLUE("blue"),
    	PURPLE("purple");
    	String value;
    
    	private Color(String value) {
    		this.value = value;
    	}
    
    	public String getValue() {
    		return value;
    	}
    }

    在switch中使用enum,是enum提供的一个非常方便的功能。

    package me.benzeph.myenums;
    
    import myenums.Color;
    import org.junit.Test;
    
    import static myenums.Color.*;
    import static org.hamcrest.core.Is.is;
    import static org.junit.Assert.assertThat;
    
    public class MyEnumTest {
    	@Test
    	public void shouldReturnBlue() {
    		assertThat(choose(BLUE), is("blue"));
    	}
    
    	private String choose(Color color) {
    		String value;
    		switch (color) {
    			case RED:
    				value = RED.getValue();
    				break;
    			case GREEN:
    				value = GREEN.getValue();
    				break;
    			case BLUE:
    				value = BLUE.getValue();
    				break;
    			default:
    				value = "colorful";
    		}
    		return value;
    	}
    }


    values()方法,可以得到enum中所有元素的数组。

    package me.benzeph.myenums;
    
    import myenums.Color;
    import org.junit.Test;
    
    import static org.hamcrest.core.Is.is;
    import static org.junit.Assert.assertThat;
    
    public class MyEnumTest {
    	@Test
    	public void shouldReturn6() {
    		assertThat(Color.values().length, is(6));
    	}
    }


    如果你研究一下父类Enum,你会发现它并没有values()方法。

    values()方法是由编译器添加的static方法。

    参考文献:

    《Thinking In Java》

    http://www.cnblogs.com/frankliiu-java/archive/2010/12/07/1898721.html

    http://softbeta.iteye.com/blog/1185573




  • 相关阅读:
    day28 粘包, 合法性连接
    day27 网络通信协议, tcp和udp, 缓冲区, subprocess
    day 26 C/S架构, 网络通信流程, 初识socket
    day25 包语法
    Python9-From-CSS-day48
    Python9-前端基础知识-day47
    Python9-MySQL-MySQL-ORM框架-day48
    Python9-MySQL-MySQL存储过程-视图-触发器-函数-day45
    Python9-MySQL-pymysql模块-day44
    Python9-MySQL-Homework-day43
  • 原文地址:https://www.cnblogs.com/pangblog/p/3299298.html
Copyright © 2011-2022 走看看