
最近在项目中发现了同事写的代码,用到了很多Java8的特性,本篇就写关于函数式接口的;
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为lambda表达式。Lambda表达式和方法引用(实际上也可认为是Lambda表达式)上。
可以将lambda表达式作为参数传入方法,并处理;
该注解主要起一个标记校验作用,在编译时校验该接口是否遵循函数式接口规则;
Java 不会强制要求你使用@FunctionalInterface注解来标记你的接口是函数式接口, 然而,作为API作者, 你可能倾向使用@FunctionalInterface指明特定的接口为函数式接口, 这只是一个设计上的考虑, 可以让用户很明显的知道一个接口是函数式接口。
未违反规则:
@FunctionalInterface
public interface TestFunc {
void test();
}
违反规则:



java.lang.Object里面的public方法
java.lang.Runnablejava.util.concurrent.Callablejava.security.PrivilegedActionjava.util.Comparatorjava.io.FileFilterjava.nio.file.PathMatcherjava.lang.reflect.InvocationHandlerava.beans.PropertyChangeListenerjava.awt.event.ActionListenerjavax.swing.event.ChangeListener集中在java.util.function包下边;
Predicate -- 传入一个参数,返回一个bool结果, 方法为boolean test(T t)Consumer -- 传入一个参数,无返回值,纯消费。 方法为void accept(T t)Function -- 传入一个参数,返回一个结果,方法为R apply(T t)Supplier -- 无参数传入,返回一个结果,方法为T get()
@FunctionalInterface
public interface AnnotationFunc {
/**
* 注释执行方法回调
*/
void callBack();
}
public class TestTwo {
public static void main(String[] args) {
//赋值函数
AnnotationFunc annotationFunc=()-> System.out.println("test");
//调用方法执行
annotationFunc.callBack();
}
}
test
Process finished with exit code 0
这里大概的了解了Java8的函数式编程,可以将函数(lambda表达式)作为参数传递
原文:https://www.cnblogs.com/guoyuchuan/p/11342686.html