美文网首页
函数式接口 + Lambda实现函数指针

函数式接口 + Lambda实现函数指针

作者: hei禹 | 来源:发表于2018-09-29 23:49 被阅读0次

    坏味道:

    Long count = 0L;
    List<Result> list = new ArrayList<>();
    
    if (type == 0) {
        count = dao.pageCountA(query);
        if (count == 0) {
            return;
        }
        list = dao.pageQueryA(query);
        
    } else {
        count = dao.pageCountB(query);
        if (count == 0) {
            return;
        }
        list = dao.pageQueryB(query);
    }
    

    坏味道:相同的代码多次出现

    函数式接口 + Lambda实现类似功能:

    函数式接口定义:

    @FunctionalInterface
    public interface PageCountHelper {
        Long pageCount(Query query);
    }
    
    @FunctionalInterface
    public interface PageQueryHelper {
        List<Result> pageQuery(Query query);
    }
    

    配合Lambda使用:

    PageCountHelper pageCountHelper = (Query query) -> dao.pageCountA(query);
    PageQueryHelper pageQueryHelper = (Query query) -> dao.pageQueryA(query);
    
    if (type != 0) {
        pageCountHelper = (Query query) -> dao.pageCountB(query);
        pageQueryHelper = (Query query) -> dao.pageQueryB(query);
    }
    
    Long count = pageCountHelper.pageCount(query);
    if (count == 0) {
        return;
    }
    List<Result> result = pageQueryHelper.pageQuery(query);
    
    参考资料:

    1、函数式接口@FunctionalInterface

    相关文章

      网友评论

          本文标题:函数式接口 + Lambda实现函数指针

          本文链接:https://www.haomeiwen.com/subject/bqdioftx.html