欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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();
  }