枚举应用

语法定义

枚举类型(enum type)是指一组固定常量组成合法值得类型,例如一年中的四季、太阳系中的行星或者一副牌中的花色

int枚举模式

public static final int APPLE_FUJI = 0;
public static final int APPLE_PIPPIN = 1;
public static final int APPLE_GRANNY_SMITH = 1;

public static final int ORANGE_NAVEL = 0;
public static final int ORANGE_TEMPLE = 1;
public static final int ORANGE_BLOOD = 1;
这种方法称为int枚举模式,他存在的很多不足。
	1. 不具有类型安全
	2. 没有描述性可言
	3. 很难将int枚举转化成可打印的字符串
例如:讲apple传到想要传到orange的方法中,编译器也不会发出警告

扩展:这种模式还有一种辩题,他是用的是String常量,称为String枚举模式。这种模式提供了可打印的字符串。但同时会导致初级用户直接把字符串常量硬编码到客户端代码中,而不使用对应的常量字段名,这样只会在运行时报错

枚举类型

public enum Apple{FUJI,PIPPIN,GRANNY_SMITH}
public enum Orange{NAVEL,TEMPLE,BOOD}

基本思想:通过公有的静态final域为每个枚举常量导出一个实例。枚举类型无可访问的构造器,所以他是真正的final类。客户端不能创建和扩展。他们都是单例的

优点:
1-保证编译时的类型安全
2-包含同名常量的多个枚举类型可以在一个系统中和平相处,因为每个类型都有自己的命名空间

应用

看过大话设计模式的简单工厂模式的都一定有印象,里面的例题是一个利用面向对象语言实现一个计算器控制台程序。具体细节不说了,为了使程序具有高内聚和低耦合。最后使用工厂模式创建了很多类

这里使用枚举加JDK8函数式编程实现相同的功能

public enum Operator {
	PLUS  ("+", (x, y) -> x + y), 
	MINUS ("-", (x, y) -> x - y),
	TIMES ("+", (x, y) -> x * y),
	DIVIDE("+", (x, y) -> x / y);	
	  
	private final String symbol;
	private final DoubleBinaryOperator op;// 函数接口,接受两个double类型参数返回一个double的value
	
	Operator(String symbol, DoubleBinaryOperator op) {
		this.symbol = symbol;
		this.op = op;
	}

	@Override
	public String toString() {
		return symbol;
	}

	public double apply(double x, double y) {
		return op.applyAsDouble(x, y);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值