ボックスから拡張機能として既存の Java 静的メソッドを使用することは可能ですか?
考えてみましょうcom.google.common.collect.Iterables.transform
。さて、これに対処する方法がわからないので、提案された方法を拡張として使用するには、次のように記述する必要があります。
import com.google.common.collect.Iterables.transform
public fun <F, T> Iterable<F>.transform(function: Function<in F, out T>) : Iterable<T> {
return transform(this, function);
}
したがって、この後、イテラブルで使用できます。
Iterable<A> input;
Function<A, B> function;
Iterable<B> output = input.transform(function);
ただ、自分で拡張子を宣言するのは不要だと思います。この宣言を省略する方法は?
アップデート
私の質問には 2 つの主なサブ質問があります。
既存の (静的) メソッドを拡張機能としてインポートすることはできますか?
いいえ、今のところ不可能です。
既存のグアバを
Function
s などに再利用するにはどうすればよいtransform
Iterable
ですか?回答で提案されているように、代わりに拡張機能
transform
を使用する必要があります。map
sを再利用Function
するには、次のような拡張機能を使用できます。
public fun <T, R> Function<T, R>.asFun(): (T) -> R
= { input -> apply(input) };