Jacob K
02/13/2023, 1:33 PMdata class Farmer(
val id: String,
val farms: ???
)
f1 = Farmer("1", {
"foo": <SomeClassInstance>,
"bar": <SomeClassInstance>
})
f2 = Farmer("2", {
"baz": <SomeClassInstance>,
"qux": <SomeClassInstance>
})
// Access farms by name, checked at compile time
f1.farms.foo
f2.farms.qux
Arkadiusz
02/13/2023, 1:44 PMdata class Farmer(
val id: String,
val farms: Map<String,<SomeClassInstance>>
)
No, because Kotlin is strongly statically typedJacob K
02/13/2023, 1:48 PMDamien O'Hara
02/13/2023, 1:53 PMdata class Farmer<F>(
val id: String,
val farms: F
)
private val f1 = Farmer("1", object {
val foo: String = "foo"
val bar: String = "bar"
})
private val f2 = Farmer("2", object {
val baz: Int = 4
val qux: Int = 6
})
fun main() {
println("${f1.farms.foo}, ${f1.farms.bar}, ${f2.farms.baz}, ${f2.farms.qux}")
}
Jacob K
02/13/2023, 1:54 PMAny
in a public context. But it works in local and private (not inline) declarations. So I thought, maybe it can be persuaded 😉 (it's for simplifying some test-cases)Damien O'Hara
02/13/2023, 1:57 PMJacob K
02/13/2023, 1:58 PMprivate
visibility modifier might make it impractical.Damien O'Hara
02/13/2023, 2:00 PMJacob K
02/13/2023, 2:20 PMdata class Farmer<TFarms, TTractors>(val id: String, val farms: TFarms, val tractors: TTractors)
object Farmer1Farms {
const val FOO = "123"
const val BAR = "123"
}
object Farmer1Tractors {
const val SUPERPULLER = "WROOM"
const val PLOWER = "YUMYUM"
}
val farmer1 = Farmer("farmer_1", Farmer1Farms, Farmer1Tractors)
fun main() = println("${farmer1.farms.BAR} uses ${farmer1.tractors.SUPERPULLER}")