Java类枚举

枚举作为程Java中一道靓丽的风景线,更易读、更加安全、功能非常强大
  • 字段

    • 无硬性约束
  • 方法

    • 普通方法
    • 抽象方法(可为每个枚举内部类添加独立的自定义方法)
  • 构造函数

    • 构造函数必须为private

    直接上代码


package com.td.enums;

import java.util.Arrays;
import java.util.Optional;

/**
 * 简单计算器
 */
public enum Operation {
	PLUS("+") {
		double apply(double x, double y) {return x + y;}
	},
	MINUS("-") {
		double apply(double x, double y) {return x - y;}
	},
	TIMES("*") {
		double apply(double x, double y) {return x * y;}
	},
	DIVIDE("/") {
		double apply(double x, double y) {return x / y;}
	};
	private final String symbol;

	Operation(String symbol) {this.symbol = symbol;}
	
	abstract double apply(double x, double y);
	
	public static void main(String[] args) {
		Arrays.asList(Operation.values()).forEach(v -> {
			double result = v.apply(1.2, 2);
			System.out.println(result);
		});
		System.out.println(Operation.getById("-").get().name());
	}

	public static Optional<Operation> getById(String id) {
		return Arrays.stream(Operation.values()).filter(operation -> operation.symbol.equals(id)).findAny();
	}
}

/**
 * 工资计算器
 */
enum PayrollDay {
	MONDAY(PayType.WEEKDAY), TUESDAY(PayType.WEEKDAY), WEDNESDAY(PayType.WEEKDAY), THURSDAY(PayType.WEEKDAY),
	FRIDAY(PayType.WEEKDAY), STATURDAY(PayType.WEEKEND), SUNDAY(PayType.WEEKEND);
	
	private final PayType payType;
	
	private PayrollDay(PayType payType) {this.payType = payType;}

	double pay(double hoursWorked, double payRate) {
		return payType.pay(hoursWorked, payRate);
	}

	private enum PayType {
		WEEKDAY{
			double overtimePay(double hours, double payRate) {
				return hours <= HOURS_PER_SHIFT ? 0 : (hours - HOURS_PER_SHIFT) * payRate / 2;
			}
		},
		WEEKEND{
			double overtimePay(double hours, double payRate) {
				return hours * payRate / 2;
			}
		};
		private static final int HOURS_PER_SHIFT = 8;
		abstract double overtimePay(double hours, double payRate);
		double pay(double hoursWorked, double payRate) {
			double basePay = hoursWorked * payRate;
			return basePay + overtimePay(hoursWorked, payRate);
		}
	}
	
	public static void main(String[] args) {
		Arrays.asList(PayrollDay.values()).forEach(v -> {
			double result = v.pay(10, 100);
			System.out.println(result+"--"+v.ordinal());
		});
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_37481769/article/details/84257242
今日推荐