Java類列舉
阿新 • • 發佈:2018-11-20
列舉作為程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());
});
}
}