初期化されていない値を設定して実験していて、以下を機能させようとしていました。これは主に、具体化されたジェネリックの能力 (および制限) に対する好奇心です。
データ クラスのオプション パラメータにデフォルト値を指定しようとしていました。
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
includes句の場合is Type
、Kotlin にはスマート キャストがあります。この例では、スマート キャストが機能していないため、コンパイルされません。
同様のことを達成するためのアイデアはありますか?