3

ボックスから拡張機能として既存の 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 つの主なサブ質問があります。

  1. 既存の (静的) メソッドを拡張機能としてインポートすることはできますか?

    いいえ、今のところ不可能です。

  2. 既存のグアバをFunctions などに再利用するにはどうすればよいtransform Iterableですか?

    回答で提案されているように、代わりに拡張機能transformを使用する必要があります。mapsを再利用Functionするには、次のような拡張機能を使用できます。

public fun <T, R> Function<T, R>.asFun(): (T) -> R
    = { input -> apply(input) };
4

1 に答える 1