java-处理IF-ELSE或switch太多

实现功能:根据不同的ID调用不同的函数,返回不同的内容,如果用if条件判断,显然很啰嗦

1、初始化

定义常量类:

class IdTypeEnum {
    public static final String FIRST_ID_TYPE = "type1";
    public static final String SECOND_ID_TYPE = "type2";
    public static final String THIRD_ID_TYPE = "type3";
}

定义不同的函数功能: 

public static int readType1Content(long curTime) {
    return 1;
}

public static int readType2Content(long curTime) {
    return 2;
}

public static int readType3Content(long curTime) {
    return 3;
}

2、实现一个接口用于返回所需内容

interface Operation {
    int readContent(long curTime);
}

3、建立一个村操作的Map,并添加不同功能

/**
 * 存读取的操作
 */
static Map<String, Operation> operationMap = new HashMap<>();

static {
    /**
     *  lambda表达式带参数,有返回
     *  operationMap.put(IdTypeEnum.FIRST_ID_TYPE, (curTime) -> readType1Content(curTime));
     *  operationMap.put(IdTypeEnum.SECOND_ID_TYPE, (curTime) -> readType2Content(curTime));
     *  operationMap.put(IdTypeEnum.SUMMARY_ID_TYPE, (curTime) -> readType3Content(curTime));
     */
    operationMap.put(IdTypeEnum.FIRST_ID_TYPE, TestLambda::readType1Content);
    operationMap.put(IdTypeEnum.SECOND_ID_TYPE, TestLambda::readType2Content);
    operationMap.put(IdTypeEnum.THIRD_ID_TYPE, TestLambda::readType3Content);
}

4、实现测试

public static void main(String[] args) {
    long curTime = System.currentTimeMillis();
    System.out.println(operationMap.get(IdTypeEnum.FIRST_ID_TYPE).readContent(curTime));
    System.out.println(operationMap.get(IdTypeEnum.SECOND_ID_TYPE).readContent(curTime));
    System.out.println(operationMap.get(IdTypeEnum.THIRD_ID_TYPE).readContent(curTime));
    /**
    * 1
    * 2
    * 3
    */
}

所有代码:

package learn;

import java.util.HashMap;
import java.util.Map;

class IdTypeEnum {
    public static final String FIRST_ID_TYPE = "type1";
    public static final String SECOND_ID_TYPE = "type2";
    public static final String THIRD_ID_TYPE = "type3";
}

public class TestLambda {

    interface Operation {
        int readContent(long curTime);
    }

    /**
     * 存读取的操作
     */
    static Map<String, Operation> operationMap = new HashMap<>();

    static {
        /**
         *  operationMap.put(IdTypeEnum.FIRST_ID_TYPE, (curTime) -> readType1Content(curTime));
         *  operationMap.put(IdTypeEnum.SECOND_ID_TYPE, (curTime) -> readType2Content(curTime));
         *  operationMap.put(IdTypeEnum.SUMMARY_ID_TYPE, (curTime) -> readType3Content(curTime));
         */
        operationMap.put(IdTypeEnum.FIRST_ID_TYPE, TestLambda::readType1Content);
        operationMap.put(IdTypeEnum.SECOND_ID_TYPE, TestLambda::readType2Content);
        operationMap.put(IdTypeEnum.THIRD_ID_TYPE, TestLambda::readType3Content);
    }

    public static int readType1Content(long curTime) {
        return 1;
    }

    public static int readType2Content(long curTime) {
        return 2;
    }

    public static int readType3Content(long curTime) {
        return 3;
    }

    public static void main(String[] args) {
        long curTime = System.currentTimeMillis();
        System.out.println(operationMap.get(IdTypeEnum.FIRST_ID_TYPE).readContent(curTime));
        System.out.println(operationMap.get(IdTypeEnum.SECOND_ID_TYPE).readContent(curTime));
        System.out.println(operationMap.get(IdTypeEnum.THIRD_ID_TYPE).readContent(curTime));
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值