私は、an earlier questionで受け取ったアドバイスに基づいて、「エイリアス」で頻繁に使用される外国の機能(私が制御しない)の名前を短縮しました。これは拡張機能のためにうまく機能しました。しかし、私はいくつかのトップレベル関数を持っています。簡略化した例として、generateSequence
の機能を考えてみましょう。Genericsを含むKotlin関数のインラインエイリアス?
// DOES NOT COMPILE
inline val <T:Any> seq:(()->T?)->Sequence<T> get() = ::generateSequence
を...しかし、うまくin this answer説明したように、私は、ジェネリックは、受信機のタイプで使用されなければならないことができるので:私はこれを行うことができるようにしたいです。インラインを維持するトップレベル関数(ジェネリックを必要とする)の別名をエイリアスにする方法はありますか?
EDIT:私は質問を投稿した後Any?
とスター投影権を使用してみましたが、私はまだそれは良い答えだとは思わない:
inline val seq:(()->Any?)->Sequence<*> get() = ::generateSequence
それは型チェックを損なうので、これはboptimalsuようですシーケンスの要素型で、正しい?その他の答え/何がうまくいくかについての考え?それは単一のソースファイルに限られているものの
私はあなたのインライン関数のアプローチが好きですが、私はそれが 'inline-parameter'エラーの'不正な使用を返します。私はインラインプロパティを使用しました。なぜなら、[この質問は早く](https://stackoverflow.com/questions/47605151)に依頼しても、インラインで別の方法を見つけることができなかったからです。インラインプロパティ(関数リファレンス)が 'noinline'ラムダパラメータを持つ関数よりも悪いと思いますか?(私ができること、つまりジェネリックを必要としない関数について話していると仮定した場合) – sirksel