10

初期化されていない値を設定して実験していて、以下を機能させようとしていました。これは主に、具体化されたジェネリックの能力 (および制限) に対する好奇心です。

データ クラスのオプション パラメータにデフォルト値を指定しようとしていました。

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...
)

whenincludes句の場合is Type、Kotlin にはスマート キャストがあります。この例では、スマート キャストが機能していないため、コンパイルされません。

同様のことを達成するためのアイデアはありますか?

4

1 に答える 1