任何人都能解释一下吗?
protected var table = HashMap<Class<*>, Double>()
if (table.containsKey(object)) {
value = table.get(object)
}
containsKey(K):不推荐使用布尔值。地图和密钥不兼容 类型。向上倾斜?如果你确定
所以我把它改成了这个:
if (table.containsKey(object as Any?)
修复了错误,但这是我应该做的修复它吗?还是有更好的方法?
.get(object)
也有错误:
类型推断失败。必需:kotlin.Double找到了kotlin.Double?
同样的错误信息:
val c = someObject.javaClass // pre j2k code: final Class<? extends SomeClass> c = someObject.getClass();
weight = weightingTable[c] <-- error here
我不知道该怎么做
答案 0 :(得分:4)
containsKey
调用被报告为错误,因为传递给它的参数类型与映射键的类型不匹配。您的地图包含类作为键,并且您尝试将对象实例传递给它。将此更改为object as Any?
不是一个有用的修复,因为此调用将编译但始终返回false。您需要做的是使用object.javaClass
来获取对象的类。
weightingTable[c]
调用被报告为错误,因为映射不一定包含您传递给它的键的值,因此[]
操作的结果可以为空。如果不以某种方式处理null情况(使用检查,显式非空转换或the documentation中涵盖的其他选项),则无法将可空值分配给非null变量。
答案 1 :(得分:1)
这样做时:
myHashMap.get(object)
并获得:
Type inference failed. required: kotlin.Double found kotlin.Double?
即使已使用containsKey进行了检查。您可以使用以下方法解决此问题:
myHashMap.getOrElse(key) { defaultValue }