例子显示有无@FunctionalInterface都能实现Lambda,不加的话再运行期会校验是否是函数接口,加了编译的时候就会校验
public class FunDemo {
public static void main(String[] args) {
/**
* 第一个参数,就是定义了一个操作
*/
handleInAndOut(t ->"88888" + t, "1000");
handleOnlyIn(t -> System.out.println("9999" + t), "1000");
handleOnlyOut(() ->"1000");
handleInOutBoolean(t ->"1111".equals(t), "1111");
}
public static void handleInAndOut (FunInAndOut f, String str) {
System.out.println("pre");
System.out.println(f.test(str));
System.out.println("after");
}
public static void handleOnlyIn (FunOnlyIn f, String str) {
f.test(str);
}
public static void handleOnlyOut (FunOnlyOut f) {
String test = f.test();
System.out.println(test);
}
public static void handleInOutBoolean (FunInOutBoolean f, String str) {
boolean test = f.test(str);
System.out.println(test);
}
/**
* 有进有出
* @param <T>
*/
@FunctionalInterface
interface FunInAndOut {
Stringtest(T t);
}
/**
* 有进无出
* @param <T>
*/
interface FunOnlyIn {
void test(T t);
}
/**
* 无进有出
* @param <T>
*/
interface FunOnlyOut {
T test();
}
/**
* 有进返回boolean
* @param <T>
*/
interface FunInOutBoolean {
boolean test(T t);
}
}