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