java8的函数式接口
程序员文章站
2022-10-01 10:16:26
函数式接口 就是在java8里允许你为一个接口(只有一个实现的,声明为FunctionalInterface注解的)实现一个匿名的对象,大叔感觉它与.net平台的委托很类似,一个方法里允许你接收一个方法签名,这个方法在一个声明为FunctionalInterface的接口里,并且它是接口里唯一的方法 ......
函数式接口
就是在java8里允许你为一个接口(只有一个实现的,声明为functionalinterface注解的)实现一个匿名的对象,大叔感觉它与.net平台的委托很类似,一个方法里允许你接收一个方法签名,这个方法在一个声明为functionalinterface的接口里,并且它是接口里唯一的方法。
java框架里也在用它
在我们的java框架里,很多地方在用函数式接口,下面的线程类的部分代码
@functionalinterface public interface runnable { /** * when an object implementing interface <code>runnable</code> is used * to create a thread, starting the thread causes the object's * <code>run</code> method to be called in that separately executing * thread. * <p> * the general contract of the method <code>run</code> is that it may * take any action whatsoever. * * @see java.lang.thread#run() */ public abstract void run(); }
事实上,在外部需要使用runnable的实例时,可以直接构建一个匿名对象,像下面的代码是合法的
super.periodiccheck(new passablerunnable() { private boolean passed = false; @override public boolean ispassed() { return passed; } @override public void run() { system.out.println("test async task"); passed = true; } });
下面是大叔在单元测试里写的一段实例代码,供大家学习和参考
@test public void testmethodfunction() { java8fun(new run() { @override public void print() { system.out.println("类似.net里的委托!"); } }); } public void java8fun(run run) { system.out.println("执行java8函数式接口"); run.print(); } @functionalinterface interface run { void print(); }