一、Lamda表达式:解决匿名内部类定义的冗余
传统的匿名内部
interface IBook {
public void write (String name);
}
public class Main {
public static void main(String[] args) {
fun(new IBook(){
public void write (String name) {
System.out.println(name + "在写书");
}
});
}
public static void fun(IBook b) {
//接口不能被实例化,但是可以变成一个变量类型
b.write("霍金");
}
}
输出结果:霍金在写书
Lamda表达式的三种方式
1、(参数)-> 单行语句;
interface IBook {
public void write (String name);
}
public class Main {
public static void main(String[] args) {
//name是方法中的参数(String name)
fun((name)->System.out.println(name + "在写书"));
}
public static void fun(IBook b) {
//接口不能被实例化,但是可以变成一个变量类型, 设置参数
b.write("霍金");
}
}
2、(参数)->{单行语句};
interface IBook {
public void write (String name);
}
public class Main {
public static void main(String[] args) {
//name是方法中的参数(String name)
fun((name)->{
name = name.toUpperCase();
System.out.println(name + "在写书");});
}
public static void fun(IBook b) {
//接口不能被实例化,但是可以变成一个变量类型, 设置参数
b.write("霍金");
}
}
3、(参数)->简单的计算表达式;
interface IBook {
public int add (int x,int y);
}
public class Main {
public static void main(String[] args) {
//如果是多行 :fun((s1,s2) ->{return s1 + s2;});
//单行已经包括了return
fun((s1,s2) ->s1+s2);
}
public static void fun(IBook b) {
System.out.println(b.add(10,29));
}
}
———————————————————————疑问:似乎一定是要在重写接口的方法才可以用Lamda