枚举的一些用法

简介: <p>枚举策略模式:</p> <p></p><pre code_snippet_id="571367" snippet_file_name="blog_20150104_1_3412374" name="code" class="java">package com.price.effective.enum1;public enum Pay { MONDAY(PayType.WEE

枚举策略模式:

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;
	}
}



相关文章
|
1月前
|
存储 编译器 Shell
【C++基础语法 枚举】解析 C/C++ 中枚举类型大小值
【C++基础语法 枚举】解析 C/C++ 中枚举类型大小值
17 0
|
1月前
|
安全 算法 编译器
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
32 2
|
30天前
|
算法 C++ UED
【Qt 常用枚举】深入解析C++中的AlignmentFlag枚举
【Qt 常用枚举】深入解析C++中的AlignmentFlag枚举
25 0
|
4月前
枚举的使用和注意事项
枚举的使用和注意事项
17 0
|
5月前
|
存储 安全 Java
枚举的 7 种使用方法
枚举的 7 种使用方法
|
12月前
|
C语言
C语言 枚举,枚举设置指定值
数据类型,该整型类型有 6 个数据,默认是从 0 开始,依次递增一个。 yellow 是0 的名字,可以直接使用yellow代替0,yellow 不是变量名,就是一个名字,代表数字0.
70 0
|
设计模式 Java 开发者
实战小技巧6:枚举的特殊用法
难道我们日常使用的枚举还有什么特殊的玩法不成?没错,还真有,本文主要介绍枚举的两种不那么常见的使用姿势
115 0
|
开发者
枚举(枚举中定义其它结构)|学习笔记
快速学习 枚举(枚举中定义其它结构)