HashMap错误 - containsKey,get

时间:2016-02-23 21:16:37

标签: kotlin

任何人都能解释一下吗?

问题代码:

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

我不知道该怎么做

2 个答案:

答案 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 }