枚举的一些用法

枚举策略模式:

package com.price.effective.enum1;

public enum Pay {
	MONDAY(PayType.WEEKDAY),
	SUNDAY(PayType.WEEKEND);

	private PayType payType;

	Pay(PayType payType){
		this.payType = payType;
	}

	double pay(double hoursworked, double payRate){
		return payType.overPay(hoursworked - 8, payRate) + payRate*8;
	}

	private enum PayType{
		WEEKEND{
			@Override
			double overPay(double hours, double payRate) {
				return hours * payRate * 3;
			}
		},

		WEEKDAY{

			@Override
			double overPay(double hours, double payRate) {
				return hours * payRate;
			}

		};

		abstract double overPay(double hours, double payRate);
	}
}

枚举值域

package com.price.effective.enum1;

import java.util.EnumSet;
import java.util.Set;

public class TestEnumSet {
	// 一般的结合是List或者Set, 还有种跟好的办法如下:
	public static final int STYLE_BOLD = 1 << 0;
	public static final int STYLE_ITALIC = 1 << 1;
	// 这样就能够使用位运算来得到一个int型表示的集合,效率较高
	public void applyStyles(int styles){
		if((styles & STYLE_BOLD) != 0){
			System.out.println("BOLD");
		}
		if((styles & STYLE_ITALIC) != 0){
			System.out.println("ITALIC");
		}
	}

	// 下面用EnumSet来实现以下
	public enum Style{BOLD, ITALIC};

	public void applyStyles(Set<Style> styles){
		if(styles.contains(Style.BOLD)){
			System.out.println("BOLD");
		}
		if(styles.contains(Style.ITALIC)){
			System.out.println("ITALIC");
		}
	}

	public static void main(String[] args) {
		TestEnumSet tes = new TestEnumSet();
		tes.applyStyles(TestEnumSet.STYLE_BOLD | TestEnumSet.STYLE_ITALIC);
		tes.applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
	}
}

枚举作为Map的key:

package com.price.effective.enum1;

import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;

/**
 * 给动物分类
 *
 * @author cdwangzijian
 *
 */
public class TestEnumMap {
	public static void main(String[] args) {
		// 一种方式是便利所有的动物,根据类型加入到对应的集合中
		// 稍微好一点的可能可以利用类型名称数组来分类,如下:
		List<Animal>[] animalByType = new List[Animal.Type.values().length];
		for (int i = 0 ; i < animalByType.length; i++) {
			animalByType[i] = new ArrayList<Animal>();
		}
		for (Animal a : Animal.getAnimals()) {
			animalByType[a.getType().ordinal()].add(a);
		}

		printResult(animalByType);

		Map<Animal.Type, Animal> animalTypeMap = new EnumMap<Animal.Type, Animal>(Animal.Type.class);
		for (Animal a : Animal.getAnimals()) {
			animalTypeMap.put(a.getType(), a);
		}

		printResult(animalTypeMap.values());
	}

	private static void printResult(Collection<Animal> values) {
		System.out.println(values);
	}

	private static void printResult(List<Animal>[] animalByType) {
		for (List<Animal> as : animalByType) {
			System.out.println(as);
		}
	}
}

class Animal{
	public static enum Type{LINGZHANG, CAT, FLY};
	private String name;
	private Type type;

	public Animal(String name, Type type) {
		this.name = name;
		this.type = type;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Type getType() {
		return type;
	}

	public void setType(Type type) {
		this.type = type;
	}

	@Override
	public String toString() {
		return "name:" + name;
	}
	public static List<Animal> getAnimals(){
		Animal tiger = new Animal("tiger", Animal.Type.CAT);
		Animal chiken = new Animal("chiken", Animal.Type.LINGZHANG);
		Animal monkey = new Animal("monkey", Animal.Type.FLY);
		List<Animal> animals = new ArrayList<Animal>();
		animals.add(tiger);
		animals.add(chiken);
		animals.add(monkey);
		return animals;
	}
}
时间: 2024-10-22 22:34:14

枚举的一些用法的相关文章

枚举Enum的用法

一.前言 对于枚举Enum,大家都非常熟悉,但枚举出现的场景非常多的时候,是不是可以抽象出一个通用的解决方式.代码大家都会写,但并不是所有人都喜欢写重复的代码,老是用Ctrl+C和Ctrl+V累不累啊?很多人和我一样,非常不喜欢写重复的代码,代码写多了,BUG就多.对于常见的场景,大部分人都喜欢抽象出来,写一套通用的,每个地方都可以用,而且不易出错.当然,你喜欢Ctrl+C和Ctrl+V,本人也没有办法.... 二.int值,string值转换成Enum 如下,一个简单枚举: public en

详解Swift中enum枚举类型的用法_Swift

一.引言 在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据. 二.枚举语法 Swift中enum关键字来进行枚举的创建,使用case来创建每一个枚举值,示例如下: //创建姓氏枚举,和Objective-C不同,Swift枚举不会默认分配值 enum Surname { case 张 case 王 case 李 case 赵 } //创建一个枚举类型的

枚举类型的用法

C# 语言规范 14.3 枚举成员枚举类型声明的体用于定义零个或多个枚举成员,这些成员是该枚举类型的命名常数.任意两个枚举成员不能具有相同的名称. enum-member-declarations:(枚举成员声明:) enum-member-declaration(枚举成员声明)enum-member-declarations , enum-member-declaration(枚举成员声明 , 枚举成员声明) enum-member-declaration:(枚举成员声明:) attribut

iOS开发之枚举用法小结_IOS

前言 Enum,也就是枚举,从C语言开始就有了,C++.Java.Objective-C.Swift这些语言,当然都有对应的枚举类型,功能可能有多有少,但是最核心的还是一个-规范的定义代码中的状态.选项等"常量". 举个例子,我们想要在开发中根据四季的变化做不同的操作,我们首先想到的可能会是定义一个int型变量,通过为该变量赋不同的值来表示四季(e.g. 1为春天,2为夏天,3为秋天,4为冬天).但是,对于阅读该份代码的人来讲,他们并不能在短时间内就明白数字1234所代表的具体含义.这

Java枚举的七种常见用法总结(必看)_java

用法一:常量 在JDK1.5之前,我们定义常量都是:publicstaticfianl.....现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. Java代码 public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. Java代码 enum Signal { GREEN, YELLOW,

Java枚举(enum) 详解7种常见的用法_java

JDK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便.  用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int

Java(enum)枚举用法详解_java

概念 enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, GREEN, BLUE } 如果枚举不添加任何方法,枚举值默认为从0开始的有序数值.以 Color 枚举类型举例,它的枚举常量依次为RED:0,GREEN:1,BLUE:2 枚举的好处:可以将常量组织起来,统一进行管理. 枚举的典型应用场景:错误码.状态机等. 枚举类型的本质 尽管enum 看起来像是一种

Java枚举详解及使用实例(涵盖了所有典型用法)_java

在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数据集",春夏秋冬四个数据元素组成了四季的"数据集". 在java中如何更好的使用这些"数据集"呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法. package com.ljq.test; /** * 枚举用法详解 * * @author jiqinli

PHP中Enum(枚举)用法实例详解_php技巧

本文实例讲述了PHP中Enum(枚举)用法.分享给大家供大家参考,具体如下: PHP其实有Enum类库的,需要安装perl扩展,所以不是php的标准扩展,因此代码的实现需要运行的php环境支持. (1)扩展类库SplEnum类.该类的摘要如下: SplEnum extends SplType { /* Constants */ const NULL __default = null ; /* 方法 */ public array getConstList ([ bool $include_def