举个例子吧,比如:你需要根据一个字段的类型不同去调用不同的方法,也可以是根据值不同,给变量赋值调用同一个方法,这样在平常都少不了if{}else{}的判断。
public class TestOperation {
public static int add(int a,int b){
return a+b;
}
public static int sub(int a,int b){
return a-b;
}
public static int mul(int a,int b){
return a*b;
}
public static int div(int a,int b){
return a/b;
}
public static void main(String[] args) {
System.out.println(TestOperation.operation("add", 2, 4));;
}
public static int operation(String type,int a,int b){
if("add".equals(type)){
return TestOperation.add(a, b);
}else if("sub".equals(type)){
return TestOperation.sub(a, b);
}else if("mul".equals(type)){
return TestOperation.mul(a, b);
}else if("div".equals(type)){
return TestOperation.div(a, b);
}
return -1;
}
}
当然上面的例子可能不太合适,大家能理解那个意思就行了。以下是用枚举对上面的方法进行的改造:
public enum Operation {
ADD("+") {
public int eval(int arg1, int arg2) {
return arg1 + arg2;
}
},
SUBTRACT("-") {
public int eval(int arg1, int arg2) {
return arg1 - arg2;
}
},
MULTIPLY("*") {
public int eval(int arg1, int arg2) {
return arg1 * arg2;
}
},
DIVIDE("/") {
public int eval(int arg1, int arg2) {
return arg1 / arg2;
}
};
private static Map<String, Operation> map = new HashMap<String, Operation>();
static {
for (Operation legEnum : Operation.values()) {
map.put(legEnum.getSymbol(), legEnum);
}
}
public static Operation getMethod(String symbol) {
return map.get(symbol);
}
private String symbol;
Operation(String symbol) {
this.symbol = symbol;
}
public String getSymbol() {
return symbol;
}
public abstract int eval(int arg1, int arg2);
}
public class Calculator {
public static void main(String[] args) {
// Scanner in = new Scanner(System.in);
// System.out.print("First operand: ");
// int a = in.nextInt();
// System.out.print("Operator: ");
// String opSymbol = in.next();
// System.out.print("Second operand: ");
// int b = in.nextInt();
// for (Operation op : Operation.values()) {
// if (op.getSymbol().equals(opSymbol)) {
// int result = op.eval(a, b);
// System.out.println(result);
// }
// }
//根据传入的值直接调用一个方法就可分别进行操作,省去了if{}else{}操作
System.out.println(Operation.getMethod("+").eval(3, 4));
}
}
这样的改造不知道大家是否满意。这样的话,如果再加类型,只需要在枚举里加一下,就能支持你传来的值了。不用再加if{}else{}判断了,是不是感觉方便了很多