[解決済み] kotlin.Resultはなぜ戻り値として使えないのですか?
質問
あるメソッドを作成し、その戻り値が
Result<R>
のクラスで
MyClass<R>
というエラーメッセージが表示されますが、'kotlin.Result' を戻り値の型として使用することはできません。
ヒントを得るためにResultのソースコードも調べてみましたが、なぜそうなるのでしょうか?
テストコード (v.1.3-RCを使用)。
class MyClass<R>(val r: R) {
fun f(): Result<R> { // error here
return Result.success(r)
}
}
fun main(args: Array<String>) {
val s = Result.success(1)
val m = MyClass(s)
}
どのように解決するのですか?
からの コトリンKEEP :
これらの制限の背後にある根拠は、将来のバージョンの を返す関数のセマンティクスを拡張したり変更したりする可能性があるからです。 また、Null-safety演算子はResult型の値に使用されたときにそのセマンティクスを変更する可能性があります。 の値で使用された場合、セマンティクスが変更される可能性があるからです。既存のコードを壊さないようにするために のコードを壊さないようにするためと、そのような変更のためにドアを開けておくためです。 に対応するために、対応する使用は今エラーを生成します。例外として このルールの例外は、標準ライブラリで慎重に検討された宣言のために作られます。 標準ライブラリにある、結果型API自体の一部である、慎重に検討された宣言については例外となります。
注意してください。
を使って実験したいだけなら
Result
型の実験をしたいだけなら、Kotlinコンパイラの引数に
-Xallow-result-return-type
.
JavaやAndroidのプロジェクトでGradleを使用する場合。 Kotlinのコンパイルタスクでcompilerの引数を定義する。これは本番コードとテストの両方に適用されます。
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions {
freeCompilerArgs = freeCompilerArgs + "-Xallow-result-return-type"
}
}
マルチプラットフォームプロジェクトでGradleを使用する場合。 コンパイル対象ごとにコンパイラの引数を定義する。これは本番コードとテストの両方に適用されます。
kotlin {
targets.all {
compilations.all {
kotlinOptions {
freeCompilerArgs = freeCompilerArgs + "-Xallow-result-return-type"
}
}
}
}
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 与えられた名前と引数の型に一致する関数がない
-
[解決済み] MATLAB関数におけるオプションの引数
-
[解決済み] オプションの呼び出し変数を持つ関数を作成する
-
[解決済み] Swiftのクラスにおける静的関数/変数とクラス関数/変数?
-
[解決済み】Scalaの「リフティング」とは何ですか?
-
[解決済み】「関数」と「プロシージャ」の違いは何ですか?
-
[解決済み] swiftで関数から複数の値を返す
-
[解決済み] Rust のデフォルトの関数引数
-
[解決済み] どのように私はSwiftで完了ハンドラを持つ関数を作成することができましたか?
-
[解決済み] Clojureで関数の引数にデフォルト値を作成する方法