用enum代替int常量

public class EnumObject {

	public static void main(String[] args) {
		
		double x = 1.11;
		double y = 2.01;
		for (Operation op : Operation.values())
			System.out.printf("%f %s %f = %f%n", x, op, y, op.apply(x, y));
		
		System.out.println(Operation.valueOf("MINUS").getSymbol());
		System.out.println(Operation.valueOf("DIVIDE").ordinal());
	}
}

enum Operation {
	PLUS("+") {
		public double apply(double x, double y) { return x + y; }
	},
	MINUS("-") {
		public double apply(double x, double y) { return x - y; }
	},
	TIMES("*") {
		public double apply(double x, double y) { return x * y; }
	},
	DIVIDE("/") {
		public double apply(double x, double y) { return x / y; }
	};
	
	private final String symbol;
	private Operation(String symbol) {
		this.symbol = symbol;
	}
	public String getSymbol() {
		return this.symbol;
	}
	@Override public String toString() { return this.symbol; }
	
	public abstract double apply(double x, double y);
}

 输出为:

1.110000 + 2.010000 = 3.120000
1.110000 - 2.010000 = -0.900000
1.110000 * 2.010000 = 2.231100
1.110000 / 2.010000 = 0.552239
-
3

 

    * enum 枚举类型是java1.5引入的新的引用类型。enum本质上是int值。
    * 经过编译器编译之后产生的是一个 class 文件。该 class 文件经过反编译可以看到实际上是生成了一个

      类,该类继承了 java.lang.Enum<E>。
    * 每个枚举项为该枚举类型的一个实例。
      public final class EnumClass extends java.lang.Enum {
          public static final EnumClass INSTANCE;
     }
    * 枚举类型是真正的final,客户端不能创建枚举类型的实例,也不能对它进行扩展。
    * 除了完善int枚举模式的不足之处,枚举类型还允许添加任意的方法和域,并实现任意的接口。

      提供了所有Object方法的高级实现。
    * 为了将数据与枚举常量关联起来,得声明field成员,并编写一个带有参数,并将参数保存在实例

      field中的构造器。
    * 枚举天生就是不可变的,因此所有的field都应该为final的。
  
    * 用实例field代替序数:
    * 所有枚举都有一个ordinal方法,它返回每个枚举常量在枚举类型中的数字位置,常量数组中的下标。
    * ordinal设计用于EnumSet等基于枚举的通用数据结构,除非编写的是这种数据结构,否则应该完全

      避免使用ordinal。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值