以类为键的 Kotlin 地图?

Exa*_*Box 2 reflection functional-programming higher-order-functions kotlin

我有一个Vehicle带有实现Car、、等Motorcycle的接口。Skateboard

我想创建一个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"),
)
Run Code Online (Sandbox Code Playgroud)

但这不会编译,因为Type Mismatch(在KClass键 和之间KClass<Vehicle>

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

有没有办法创建一个以类为键的 Map?或者,是否有更好的模式来在类和属性之间创建 1-1 映射(我不想说“属性”,因为显然,我可以将它们定义为接口中的属性,并在每个类定义中提供值 - - 我特别不想这样做,我想将所有属性保留在自己的 Map 或其他数据结构中)...似乎某些函数式编程概念或高阶函数可能适用于此。谢谢。

Ten*_*r04 7

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

val vehicleInfo : Map<KClass<out Vehicle>, Map<String, String>> mapOf(
Run Code Online (Sandbox Code Playgroud)