【发布时间】:2020-11-25 10:10:15
【问题描述】:
我有一个抽象类,它包含一些默认值,如下所示
BaseRequest.kt
abstract class BaseRequest {
abstract val route: String
/** Initially, all requests contain the route param, that's why it has to be added for all requests */
val baseMap: Map<String, String> by lazy { mapOf("route" to route) }
abstract fun toMap(): Map<String, String>
}
现在,对于所有子类,我需要扩展BaseRequest 类的任何人来覆盖toMap() 函数并返回一个初始值为route 的映射,该映射在基类中初始化。
我的意思是,一旦用户覆盖地图并用任何值填充它,我就会为这些值添加一个默认值。
例如
ItemRequest.kt
class ItemsRequest: BaseRequest() {
override val route: String = "items"
override fun toMap(): Map<String, String> = mapOf("id" to "7")
}
对于ItemsRequest 类,我需要toMap() 函数返回的映射具有id 以及默认的route,而无需在每个子类中手动添加它。
这可能吗?
【问题讨论】:
-
在您的第一个代码 sn-p 中,
ROUTE是否只是代码中实际值的占位符? -
@ChrisGong 是的,为了清楚起见,我对其进行了编辑
-
我们是否可以假设
toMap方法中的映射中的任何键值对都不会重新定义/覆盖baseMap中的键值对? -
基本上,
baseMap试图实现我正在尝试做的事情,但它没有奏效。因此,可以根据建议的方法对其进行修改或消除。