Hi, if anyone is interested, I implemented a type-safe heterogeneous map pattern as described in Effective Java by Joshua Bloch. If you are not familiar with this data structure, it is a map that could store values of different types and still provides a strongly typed API to access its contents.
Project can be found here: https://github.com/broo2s/typedmap. I tried to design the API to be as smooth as possible, by utilizing Kotlin’s goodness such as: advanced type inferring, reified types, etc.
It supports accessing items by type:
map += User("alice") val user = map.get<User>()
It supports defining typed keys:
object Username : TypedKey<String>() map[Username] = "alice" val username = map[Username]
It supports storing multiple values per a key type, similarly to regular maps:
data class UserKey(val id: Int) : TypedKey<User>() map[UserKey(1)] = User(1, "alice") map[UserKey(2)] = User(2, "bob") val alice = map[UserKey(1)] val bob = map[UserKey(2)]
Please let me know what you think!