【发布时间】:2020-04-08 22:18:37
【问题描述】:
这是我的场景,我有几个MutableList 成员,第一个用于存储String(称为sl),其余用于存储Any(称为objects、names、...),我需要通过 2 种方式访问 objects、names 和其余部分中的值:
- sl 通过索引,
- objects、names 其余通过sl、 中存储的字符串值
也许举个例子更清楚:
var tmpListItem = myStringList.sl[0] // read only for the sl list
myStringList.objects["keyname"] = "keyvalue" // write and read for the rest
var tmpObj = myStringList.objects["keyname"]
myStringList.names["keyname"] = "keyvalue"
var tmpName = myStringList.names["keyname"]
我一直在尝试为 MutableList 重载索引访问运算符,但我收到此错误:
类型不匹配:推断类型为 String 但预期为 Int
这是我目前的尝试:
data class StringList(val str: String) {
val sl = mutableListOf<String>()
val objects = mutableListOf<Any?>()
val names = mutableListOf<Any?>()
val values = mutableListOf<Any?>()
val strings = mutableListOf<Any?>()
public operator fun <E> MutableList<E>.set(k: String, value: Any?) {
val t = sl.indexOf(k)
objects[t] = value
}
operator fun <E> MutableList<E>.get(e: String): Any? {
val t = sl.indexOf(e)
return objects[t]
}
}
不确定其他实现是否更适合我的场景,欢迎提出任何建议。
【问题讨论】:
-
使用地图或配对列表不是更简单吗?
-
@Tenfour04 谢谢你的想法,但我的解释不完整,我需要处理其他列表,我已经编辑了问题。
标签: java kotlin operator-overloading mutablelist