- 正常
@Functioninterface
public interface IMessage {
public int add(int x , int y);
}
class Message implements IMessage {//被省去了
@Override
public int add(int x , int y) {
return s1 + s2;
}
}
public class TestDemo {
public static void main() {
IMessage msg = new Message();
fun(msg);
}
public static void fun(IMessage msg) {
Syatem.out.println("msg.add(10 , 20)");
}
}
- 匿名内部类
@Functioninterface
public interface IMessage {
public int add(int x , int y);
}
public class TestDemo {
public static void main() {
fun(new IMessage {//2)省去的直接在这里定义
@Override
public int add(int x , int y) {
return s1 + s2;
}
});
}
public static void fun(IMessage msg) {
Syatem.out.println("msg.add(10 , 20)");
}
}
- lambd表达式 简化匿名内部类
@Functioninterface
public interface IMessage {
public int add(int x , int y);
}
public class TestDemo {
public static void main() {
fun((s1 , s2) -> {//3)定义也省了直接(参数)->复写实现
return s1 + s2;
});
}
public static void fun(IMessage msg) {
Syatem.out.println("msg.add(10 , 20)");
}
}
- 方法引用 简化lambd表达式
@Functioninterface
public interface IMessage {
public int apply(int x , int y);
}
class Test {
private int x;
pricate int y;
public Test(int x , int y){
this.x = x;
this.y = y;
}
public int add(int x , int x) {
return x + y;
}
}
public class TestDemo {
public static void main() {
IMessage msg = Test::add;
msg.apply(10 , 20);
}
方法引用- 内建函数式接口
import java.util.function.Funtion
@Functioninterface
public interface Function<T,R> //这个消费型接口只能接受一个参数, 返回一个参数, 上面的x+y实现不了还得用Lambd表达式
public R apply(T t);
}
public class TestDemo {
public static void main(String args[]) {
Function<String , Boolean> fun = "##s1"::startsWith;
System.out.println(fun.apply("##"));
}
}
result:true
方法引用可以简化lambd表达式(有些时候?)
list.sort(Comparator.comparing((String s) -> s.length()));
list.sort(Comparator.comparing(s::length))
;