【发布时间】:2021-03-19 21:15:03
【问题描述】:
在我的设置中,我试图拥有一个继承自 Map 的接口 Table(因为它主要用作地图的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变映射,而本地的将只有一个本地条目的映射。
// entries
sealed class Entry {
class EntryLocal : Entry
class EntryGlobal : Entry
}
interface Table : Map<String, Entry> {
fun getRecursive(key: String): Entry?
}
class GlobalTable(val map:MutableMap<String, Entry>) : Table, Map<String, Entry> by map {
override fun getRecursive(key: String) = this[key]
...
}
class LocalTable(
private val parent: Table,
val map: Map<String, EntryLocal>
) : Table, Map<String, EntryLocal> { // gives error
override fun getRecursive(key: String): Entry? = map[key] ?: parent.getRecursive(key)
}
我收到以下错误:
Type parameter V of 'Map' has inconsistent values: Entry, EntryVar
这是为什么呢? Map<String, EntryLocal>不是继承自Map<String, Entry>吗?
【问题讨论】:
标签: kotlin generics covariance