2016-11-10 14 views
6

誰かが私を説明することができますどのように来るラムダのはここのメソッド参照に置き換えることができますか? RxJavaでRxJavaのメソッド参照はどのように機能しますか?

map()コメントそれは「の引数を持つ関数を表します」と述べているタイプFunc1<T, R>のパラメータを取ります。だから私は完全になぜvalueOf(Object)がここで働くのかを完全に理解している。しかし、trim()は、という引数がないので、となります。

これはどのように正確に機能しますか?

Observable.just("") 
    .map(s -> String.valueOf(s)) //lambdas 
    .map(s -> s.trim())   // 

    .map(String::valueOf)   //method references 
    .map(String::trim)   // 
    .subscribe(); 
+2

メソッドリファレンスは、例えば 'trim'、' Type :: instanceMethod'のようなメソッドは '(Type t) - > t.instanceMethod()'と同等です。 (より一般的には、 'Type :: instanceMethod'は'(Type t、extraArgs) - > t.instanceMethod(extraArgs) 'です)。 –

答えて

4

私はJavaでRXと遊ぶ、しかしString::trimが間接this引数を持つ非静的(別名束縛)関数である一方でString::valueOfは、静的(別名結合していない)関数であることを、予めご了承くださいませんでした。したがって、実際には、両方の関数は単一の引数をとります。 JavaではPythonのように見えません。

+4

実際にはJavaで' this'引数を明示的に宣言できます。ただ必要ではありません。 'public void foo(Foo this){}'は 'public void foo(){}'と同じです。 – Pokechu22

+0

@ Pokechu22私はこれが好きです。知らなかった。以来、どのJavaバージョン?あなたは知っていますか? –

+0

私はそれがJava 8で追加されたと確信しています。 – Pokechu22

関連する問題