以类作为键的Kotlin映射?

以类作为键的Kotlin映射?,kotlin,reflection,functional-programming,higher-order-functions,Kotlin,Reflection,Functional Programming,Higher Order Functions,我有一个界面Vehicle,它实现了Car,摩托车,滑板,等等 我想创建一个映射,其中包含每个实现的属性或数据值。一个非常简单的例子如下所示: val vehicleInfo : Map<KClass<Vehicle>, Map<String, String>> mapOf( Car::class to mapOf("wheels" to "4", "license_required" to &q

我有一个界面
Vehicle
,它实现了
Car
摩托车
滑板
,等等

我想创建一个
映射
,其中包含每个实现的属性或数据值。一个非常简单的例子如下所示:

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"),
)
val车辆信息:地图(
Car::等级到mapOf(“车轮”到“4”,“需要许可证”到“真”),
摩托车::等级至mapOf(“车轮”至“2”,“需要许可证”至“真实”),
滑板::等级到mapOf(“轮子”到“4”,“需要许可证”到“假”),
)
但是由于
类型不匹配
(在
KClass
键和
KClass
键之间),这将无法编译

(类似的可能性是为地图值使用数据类:
数据类(val-wheels:Int,val-license\u-required:Boolean)


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

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

val vehicleInfo : Map<KClass<out Vehicle>, Map<String, String>> mapOf(
val车辆信息:地图(

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

val vehicleInfo : Map<KClass<out Vehicle>, Map<String, String>> mapOf(
val车辆信息:地图(

侧注。如果所有“属性”车辆的名称是您希望存储在实际实现之外的内容,看起来您根本不应该使用接口和类。如果汽车、摩托车和滑板有相同的实现,它们应该是车辆的匿名实例,而不是具体的类。@Tenfour04感谢您的提示,但是它们都有v接口的methodsSide注意:如果所有的“属性”车辆的名称是您希望存储在实际实现之外的内容,看起来您根本不应该使用接口和类。如果汽车、摩托车和滑板有相同的实现,它们应该是车辆的匿名实例,而不是具体的类。@Tenfour04感谢您的提示,但是它们都有v界面方法的不同实现w
out
关键字造成了所有差异哇
out
关键字造成了所有差异