Что именно не так тут: class C( var x : T = T.MAX_VALUE)
class C<T>( var x : T = T.MAX_VALUE)
В Kotlin новичёк, и, в основном, опираюсь на знание C++. С его точки зрения тут всё в порядке. Однако Kotlin говорит:
Type parameter 'T' cannot have or inherit a companion object, so it cannot be on the left hand side of dot
В принципе, примерно понятно, хотя туманно, но главное — а как, вообще, провернуть такую вот инициализацию?
Ответы (1 шт):
Автор решения: KeyGenQt
→ Ссылка
Default для generics
class C<T> protected constructor(val x: T) {
companion object {
const val DEFAULT_INT = 0
const val DEFAULT_STRING = "DEFAULT"
inline fun <reified T> newInstance(x: T? = null): C<T>? {
return x?.let {
C(x)
} ?: run {
when (T::class) {
Int::class -> C(DEFAULT_INT as T)
String::class -> C(DEFAULT_STRING as T)
else -> null
}
}
}
}
}
println(C.newInstance(12)?.x) // 12
println(C.newInstance<Int>()?.x) // 0
println(C.newInstance("TEXT")?.x) // TEXT
println(C.newInstance<String>()?.x) // DEFAULT
println(C.newInstance(1000L)?.x) // 1000
println(C.newInstance<Long>() ?: "NOT FOUND") // NOT FOUND