以 类 作为键的 Kotlin Map?

Kotlin Map with classes as keys?

我有一个接口 Vehicle,实现了 CarMotorcycleSkateboard

我想创建一个 Map,其中包含每个实现的属性或数据值。一个非常简单的看起来像:

val vehicleInfo : Map<KClass<Vehicle>, Map<String, String>> mapOf(
  Car::class to mapOf("wheels" to "4", "license_required" to "true"),
  Motorcycle::class to mapOf("wheels" to "2", "license_required" to "true"),
  Skateboard::class to mapOf("wheels" to "4", "license_required" to "false"),
)

但由于 Type Mismatch(在 KClass 键和 KClass<Vehicle> 之间)

,因此无法编译

(类似的可能性是对地图值使用数据 class:data class(val wheels : Int, val license_required : Boolean)

有没有办法创建一个以 classes 为键的地图?或者,是否有更好的模式来创建 classes 和属性之间的 1-1 映射(我不想说“属性”,因为很明显,我可以将这些定义为界面中的属性并提供值在每个 class 定义中——我特别不想这样做,我想将所有属性一起保存在它自己的 Map 或其他一些数据结构中)……这似乎是一些函数式编程概念或更高-order 函数可能适用于此。谢谢。

为 KClass 使用协变类型,以便可以使用 Vehicle 的任何子类型。

val vehicleInfo : Map<KClass<out Vehicle>, Map<String, String>> mapOf(