Lambda接口只用于函数级接口中,它常常被用在匿名类中,而
函数级接口————接口里面只有一个函数的接口。
标识接口————接口里面什么函数都没有的接口。
以上只是对相关概念的简述,具体解释要依靠具体代码来讲解:
//函数级接口
interface T1 {
void t();
}
//有返回类型的函数级接口
interface T2 {
//这里面有一个参数a
int t(int a);
}
//有返回类型的函数级接口
interface T3 {
//这里面有两个参数a和b
int t(int a,int b);
}
/*匿名类一般是用Lambda接口写的*/
public class Lambda {
//Lambda接口只用于函数级接口,那什么又是函数级接口?
//函数级接口:接口里面只有一个函数的接口。
//标识接口:接口里面啥函数都没有的接口。
public static void main(String[] args) {
// 我们可以先在这里new一个匿名类,
// 再在其后面加上一对大括号。
// 若我们要实现该类里面的方法,
// 就可以用Alt+Enter键对该方法进行实现。
// 在这里我们再运用多态的原理,直接用T类型引用该子类。
// 因为,我们new的这个对象就是T接口的子类或实现类。
// 如果我们这个接口里有很多函数,
// 我们就用List,如果只有一个,我们就不用这么写了。
// T a=new T() {
// @Override
// public void t() {
// System.out.println("Hello");
// }
// };
//对于函数级接口,我们不用上述的方法写。
//由于该方法,没有参数,我们就用圆括号来代表参数。
//实现的大括号写到箭头后面,如果大括号里只有一句话,
//我们就直接将这句话写进输出里头就可以了。
//箭头为"指向"的意思,
//因为这个接口里只定义了一个没参数的函数。
//而要实现的就是这个没参数的函数,
//我们的实现就写到箭头后面,直接写输出就行。
//箭头后面是T1接口的子类
T1 a = () -> System.out.println("Hello");
//而我们要调用该方法的话,因为是无参函数。
//我们这里就用t()来代替。
//函数级接口,用Lambda语法代替匿名类,会更紧凑一些。
//但是,该方法只能用于函数级接口
a.t();
//对于无参函数,如果输出语句比较多,就要加大括号。
//箭头后面是T1接口的子类
T1 b = () -> {
System.out.println("Hello");
System.out.println("Hello");
};
//对于下面有参数的函数级接口,如果箭头后只有一个语句,
//就直接写运算语句,且不用写返回值。
//如果是多行语句就需要加大括号,并且要写返回值。
//如果,函数级接口里面有了一个参数。
//我们就可以直接在等号后面定义一个不重名的参数,
//可以不用跟初始定义参数名一样。
//箭头后面是T2接口的子类
T2 c = aa -> aa * 2;
System.out.println(c.t(20));
//对大括号里头的程序进行执行之后,
//本来是要返回结果的,因为这个函数是返回的,
//所以自动就返回结果了。
//如果是多行语句就需要加大括号,并且有要写返回值。
//大括号里即是T2接口的子类
T2 d = cc -> { cc *= 2;cc += 2;return cc; };
System.out.println(d.t(30));
//如果,函数级接口有多个参数
//大括号里即是T3接口的子类
T3 e = (ab, ba) -> ab + ba;
System.out.println(e.t(20, 30));
}
}