

例えば、Observableのメソッド compose は以下の様に定義されています。  
引数には ObservableTransformer 型の変数を渡すものと思いますが、これにラムダ式の関数を渡すことができるのは、なぜでしょうか。

[code]

    @SuppressWarnings("unchecked")
    @CheckReturnValue
    @SchedulerSupport(SchedulerSupport.NONE)
    public final <R> Observable<R> compose(ObservableTransformer<? super T, ? extends R> composer) {
        return wrap(((ObservableTransformer<T, R>) ObjectHelper.requireNonNull(composer, "composer is null")).apply(this));
    }
    
[/code]


CC BY-SA 4.0
2018-05-15T01:53:50.207
43992
2018-05-15T03:12:30.290
27935
question
java reactivex
RxJavaのメソッド compose の引数に、なぜラムダ式が渡せるのか


ラムダを使えるためには メソッドが1つだけのinterface であればいいです。それだけが functional interface の要件です。

<https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.8>

> A functional interface is an interface that has just one abstract method

* * *

<http://reactivex.io/RxJava/javadoc/io/reactivex/ObservableTransformer.html>

ObservableTransformer はそれを満たします。

* * *

@FunctionalInterface アノテーションはうっかり間違えて functional interface の条件を **満たさない**
ように書いてしまった時に **警告する** ためのものです(@Override と同じように)。

<https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.6.4.9>


CC BY-SA 4.0
2018-05-15T03:12:30.290
43994
2018-05-15T03:12:30.290
12274
43992
answer