num
はnullableに設定する必要がありますが、返される値は常にnull値ではありません(デフォルト値)。バッキングフィールドがnullの場合でもgetterをnull以外の型を返すように設定すると、
class Test {
var num: Int? = null
get() = field ?: 5 // default value if null
}
次は型がバッキングフィールドから推測されるが、取られていないため、返される値は、私には理にかなっている、常にnull以外であってもコンパイルされません:
val a: Int = Test().num
を型不一致:推論型はIntですか?しかし、Intが期待されました
私はそのゲッターの戻り値の型をnull値ではないように変更することはできますか?私はそうした場合、コンパイラは言う:
ゲッターの戻り値の型は、すなわち 「のInt?」プロパティのタイプと同じでなければなりません
私は(バッキングフィールドのない)別のプロパティnumNotNullable
でそれを解決できることを知っています。
class Test {
var num: Int? = null
get() = field ?: 5 // default value if null
val numNotNullable: Int
get() = num ?: 5
}
val c: Int = Test().numNotNullable
しかし、これは私が望むものではありません。 別の方法がありますか?
安全だと知っているので、技術的には「.num !!」を使用できます。それは素晴らしいことではありませんが、この場合はまだ安全です。 – chris
あなたのバッキングプロパティソリューションは間違いなく正しいものです。機能要求を見つけるためのドキュメントhttps://kotlinlang.org/docs/reference/properties.html#backing-properties – zsmb13