7
私は初期化されていないの値を設定して実験していて、次のことを実行しようとしていました。これは主に、標準化されたジェネリック医薬品の力(そして限界)の好奇心です。Kotlin reified型パラメータはスマートキャストを受けません
私は、データクラスのオプションのパラメータのデフォルト値を提供しようとしていました。
inline fun <reified T> uninitialized(): T = when (T::class) {
Long::class -> -1L // Type mismatch. Required: T Found: Long
String::class -> "" // Type mismatch. Required: T Found: String
// and so on...
else -> throw UnsupportedOperationException("No uninitialized value defined for " + T::class)
}
data class Thing(
var id: Long = uninitialized(),
var name: String = uninitialized() // and so on...
)
when
がis Type
条項が含まれ、Kotlinはスマートキャストを持っています。この例では、スマートキャストはキックインされないので、これはコンパイルされません。
同様の目的を達成するためのアイデアはありますか?あなたはその型をチェックしたりnull
とそれを比較することis
を使用した後
'T'は 'の最後に' when'全体に適用することができます初期化されていない ' – voddan