2017-05-06 32 views
2

如何在塊中放置多個方法調用(例如,在下面的例子中是'get')?這是什麼java8語法,我可以在哪裏閱讀更多?

package Routes; 

import org.jooby.mvc.Path; 

public class UserRoutes extends BaseRoutes { 

    { 

    get("/users", (req, resp) -> { 
     resp.send("Uses index"); 
    }); 

    get("/user/:id", (req, resp) -> { 
     resp.send("Single user page"); 
    }); 
    } 

} 

我在閱讀有關lambda表達式和文檔討論單個方法接口。 我學習lambda表達式,我學會叫jooby

+0

究竟混淆你的代碼?如果你已經學習了lambda表達式,那麼你應該知道'(req,resp) - > {...}'確實是一個lambda表達式。 –

+0

讓我感到困惑的是將多個方法放在一個塊中。 – joshua

+1

啊。這不是多種方法。這是多個方法調用。實例初始化塊(您可以將其看作構造塊)僅包含對get()方法的多個調用。它允許通過指定它們的路徑來定義兩條路由,以及在GET請求到達該路徑時如何處理請求和響應。 –

回答

4

Web框架這就是所謂的initializer block執行兩種方法get

get方法看起來像一個String和一個BiConsumer作爲輸入。除此之外,還不完全確定其他語法混淆了你。

+0

今天之前我從來沒有聽說過初始化塊。謝謝。 – joshua

+1

@joshua還有一個'靜態塊',應該讀一下也... – Eugene

0

這個構造與lambda無關;我相信自Java 6以來一直存在。該語法稱爲initialization blockinstance initializer{ }之間的代碼被Java編譯器複製到類中的每個構造函數中。當你的類的實例被創建時,該塊也被調用。你可以認爲這是一個更好的替代方法,必須由每個構造函數調用「init」方法。

請注意,您的User類正在擴展基類,其中明確定義了get方法。你可以寫或者

{ 

    this.get("/users", (req, resp) -> { 
     resp.send("Uses index"); 
    }); 

} 

或者

import org.jooby.Jooby; 

public class UserRoutes {  

    { 
     Jooby jooby = new Jooby(); 

     jooby.get("/users", (req, resp) -> { 
       resp.send("Uses index"); 
      }); 
    } 
} 

*通常你會擴展org.jooby.Jooby

+0

感謝您的解釋。現在我懂了。 – joshua

相關問題