编写格式
当方法的形参是一个接口或抽象类对象时,可用匿名内部类作为实参传递,也可用Lambda表达式,格式如下:
// 假设一个形参为接口对象的方法
public static void inIt(Inter in){
in.into();// in为Inter类型的接口对象
}
// 现在需要调用该方法 有两种方式:
public static void main(String[] args){
// ①匿名内部类的编写格式
inIt(new Inter(){
@Override
public void into(){
// 方法体
}
});
// ②Lambda表达式的编写格式
inIt(()->{ /*方法体*/ });
}
上述两种方法达到的效果是一样的,
都是调用了inIt()方法并重写了into()方法被调用。
格式:(形式参数) - > {代码块}
形式参数:需要重写的方法中有多个参数用逗号隔开,没有留空即可。
" -> " :固定写法,代表指向动作。
代码块:方法的实现内容。
Lambda表达式使用前提
1.必须是接口。
2.接口中必须有且仅有一个抽象方法。
Lambda表达式的省略模式
1.参数类型可省略不写(若省略必须全省略),形参只有一个时 "( )“括号可省略,没有形参时”( )"括号不能省略。
2.方法体只有一条语句 "{ ;}"大括号和封号可省略。
Lambda表达式和匿名内部类的区别
1.前提条件不同:匿名内部类可操作接口,抽象类,具体类。而Lambda表达式只能操作接口。
2.使用限制不同:若接口中只有一个抽象方法,Lambda表达式和匿名内部类均可使用。若接口中有多个抽象方法,则只能使用匿名内部类。
3.实现原理不同:匿名内部类编译后会单独生成一个.class字节码文件存在于硬盘中。而Lambda表达式不会单独生成.class字节码文件,而是随着运行时动态生成.class字节码文件,且不会存在于硬盘中。