函数式接口之方法作为参数

在现实开发中,肯定会遇到这样一种情况,有几个业务场景,里面的大部分业务逻辑都一样,只有某些逻辑不同,而这些不同的逻辑又依赖于前面的逻辑,你会选择写重复代码去实现还是选择抽取公共方法,对那些不同的逻辑做单独处理?是不是理解起来比较抽象,简单就一句话,怎么把方法作为参数调用另一个方法,那就需要使用函数式接口了,最合适的莫过于@FunctionalInterface注解 。

首先定义一个函数式接口,加上注解,定义一个方法和需要的参数

package com.zxh;

@FunctionalInterface
public interface MyFunction {
    void execute(int a, int b, String message);
}

然后定义公共的方法,用于接收方法参数,来处理不同的逻辑

    public static void dealwithData(Integer a, Integer b, String s, MyFunction method) {
        Integer pageCount = 3;
        for (int i = 1; i <= pageCount; i++) {
            method.execute(a, b, s);
        }
    }

例如上述,定义了一个方法,模拟分页去执行传入的方法的业务逻辑

在需要调用的地方传参进行自定义的逻辑

    public static void add(Integer a, Integer b, String s){
        System.out.println(a + b + "-" + s);
    }

    public static void del(Integer a, Integer b, String s){
        System.out.println(a  + "-" + b + "-" + s);
    }

    public static void main(String[] args) {
        //加法的场景
        dealwithData(1, 2, "hello", (a, b, s) -> {
            add(a, b, s);
        });
        //拼接的场景
        dealwithData(1, 2, "hello", (a, b, s) -> {
            del(a, b, s);
        });
    }

上述定义了两个方法(方法内的业务逻辑不同),然后在main方法的不同场景中调用不同的方法

那么就可以很好的实现方法的封装,减少代码的冗余。

必须要有公共方法封装的思想,提高代码的健壮性

 

posted @ 2024-12-19 10:57  钟小嘿  阅读(0)  评论(0编辑  收藏  举报