java8的函數式接口

函數式接口

就是在java8裏容許你爲一個接口(只有一個實現的,聲明爲FunctionalInterface註解的)實現一個匿名的對象,大叔感受它與.net平臺的委託很相似,一個方法裏容許你接收一個方法簽名,這個方法在一個聲明爲FunctionalInterface的接口裏,而且它是接口裏惟一的方法。java

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的實例時,能夠直接構建一個匿名對象,像下面的代碼是合法的async

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;

      }
    });

下面是大叔在單元測試裏寫的一段實例代碼,供你們學習和參考ide

@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();
  }
相關文章
相關標籤/搜索