关于省去if,else判断类型调用方法的解决方案,用枚举来解决
来源:互联网 发布:imei查询iccid软件 编辑:程序博客网 时间:2024/05/14 06:21
举个例子吧,比如:你需要根据一个字段的类型不同去调用不同的方法,也可以是根据值不同,给变量赋值调用同一个方法,这样在平常都少不了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{}判断了,是不是感觉方便了很多
0 0
- 关于省去if,else判断类型调用方法的解决方案,用枚举来解决
- 有关过多if-else代码的优雅解决方式(搭配注解替代枚举的方法)
- 状态模式——省去if-else的繁琐结构
- 求解:在springMVC中,怎么根据参数来调用不同的方法?!但是,不是用if...else...!!!
- 使用委托来减少if..else判断
- 关于jsp html标签的判断问题 if else 功能
- 关于jsp html标签的判断问题 if else 功能
- if else 错误的判断
- if else if的判断问题
- 利用枚举enum解决多if.....else if ..问题
- 关于<:if>没有<c:else>解决方案
- 关于<c:if>没有<c:else>解决方案
- 关于<c:if>没有<c:else>解决方案
- 关于<c:if没有<:else解决方案
- 关于<c:if>没有<c:else>解决方案
- 关于<:if>没有<c:else>解决方案
- 10027---关于<:if>没有<c:else>解决方案
- 关于<c:if>没有<c:else>解决方案
- 【框架】[Hibernate]多表操作与缓存技术
- myeclipse8.5用maven创建web项目,没有web属性解决办法
- C++ 11 多线程编程--线程的创建
- C++基础之指针(1)
- 数据结构-二叉树遍历
- 关于省去if,else判断类型调用方法的解决方案,用枚举来解决
- css的设计模式
- excel导出
- log4j的基本配置
- iOS Xcode 调试 Unable to fix code signing issue
- JPA基础(一):全面阐释和精彩总结JPA
- 1201 最小数和最大数
- IT-监控--galance
- hdu3311Dig The Wells