2017-05-06 19 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"); 
    }); 
    } 

} 

私はラムダについて読んでおり、ドキュメントは単一のメソッドインタフェースについて話しています。私は二つの方法getを実行initializer blockと呼ばれていますjooby

+0

を延長する

{ 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"); }); } } 

*を書くことができますか?あなたがすでにラムダについて学んでいるなら、 '(req、resp) - > {...}'が本当にラムダであることを知るべきです。 –

+0

私に混乱を招くのは、ブロック内に複数のメソッドを置くことです。 – joshua

+1

Ah。それは複数の方法ではありません。複数のメソッド呼び出しです。インスタンス初期化子ブロック(コンストラクタブロックとして見ることができます)には、単にget()メソッドへの複数の呼び出しが含まれています。パスを指定することで、2つのルートを定義し、GET要求がそのパスに来たときの要求と応答の処理方法を定義することができます。 –

答えて

4

というWebフレームワークを学ぶよう 私はラムダを学んでいます。

そのgetの方法は、StringBiConsumerを入力とするように見えます。それ以外の文法が何を混乱させるかは完全にはわかりません。

+0

私は今日までにイニシャライザブロックについて聞いたことがありませんでした。ありがとう。 – joshua

+1

@joshuaまた、 '静的なブロック 'もあります。それについても読むべきです... – Eugene

0

この構造体はlambdasとは関係ありません。 Java 6以降、私は信じています。構文は、initialization blockまたはinstance initializerと呼ばれます。 { }のコードは、Javaコンパイラによってクラス内のすべてのコンストラクタにコピーされます。ブロックは、クラスのインスタンスが作成されるときにも呼び出されます。これは、すべてのコンストラクタによって呼び出されなければならない "init"メソッドのより良い代替方法と考えることができます。

Userクラスは、getメソッドが明らかに定義されている基本クラスを拡張しています。あなたは、代わりに通常は、まさにこのコードであなたを混乱させる何org.jooby.Jooby

+0

ありがとうございました。今私はそれを得る。 – joshua

関連する問題