关于函数式接口的参数问题

67 阅读1分钟

在学习lambda的时候遇到一个问题,函数式编程在lambd传递代码实现接口的时候,参数可以传递可以不用传全部

1.定义一个类
```
// 包含两个方法,test3方法,包含三个参数,其中第一个参数类型为类本身,test2方法,两个参数,两个方法的后两个参数类型相同
static class CC{
    String name;
    CC(String name){
        this.name = name;
    }
    static void test3(CC c1, int a,int b){

    }
    void test2(int a,int b){
        System.out.println(this.name);
        System.out.println("实现类");
        System.out.println("sum:" + (a + b));
    }
}
```
2.定义函数式接口,参数列表与第一步test3方法类型类型一致
interface BB{
    void test(CC cc,int a,int b);
}
3.编写主程序
public static void main(String[] args) {
    BB b2 = CC::test2;
    CC c1 = new CC("c1");
    b2.test(c1,1,2);
}
4.结果输出

image.png

从定义处可知,函数传参为定义的是两个参数的方法,调用的时候是调用的三个参数的方法,实际实现是test2

5.结论

经过多次尝试,得到以下结论

  1. 函数式接口的第一个参数实现类本身
  2. 函数编程的实现可以不写第一个参数(既类型为本身的那个参数)
  3. 在运行时,类的实例本身作为第一个参数参与函数计算
6.猜想

1.函数编程是动态传递“代码”,也是对接口实现的一种,普通接口是否也可以这样操作 2.实操---》编译报错

image.png

多有不足