HashMap 错误 - containsKey, get

yco*_*omp 2 kotlin

任何人都可以透露一些信息吗?

问题代码:

protected var table = HashMap<Class<*>, Double>()

if (table.containsKey(object)) {
    value = table.get(object)
} 
Run Code Online (Sandbox Code Playgroud)

containsKey(K):Boolean 已弃用。Map 和 Key 具有不兼容的类型。向上看任何?如果你确定

所以我把它改成这样:

if (table.containsKey(object as Any?)
Run Code Online (Sandbox Code Playgroud)

哪个修复了错误,但这是我应该做的来修复它吗?或者,还有更好的方法?

.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
Run Code Online (Sandbox Code Playgroud)

我不知道在这里做什么

yol*_*ole 5

containsKey调用被报告为错误,因为您传递给它的参数类型与映射键的类型不匹配。您的地图包含类作为键,并且您正在尝试将对象实例传递给它。将此更改object as Any?为不是一个有用的修复,因为此调用将编译但将始终返回 false。您需要做的是使用object.javaClass来获取对象的类。

weightingTable[c]调用被报告为错误,因为映射不一定包含您传递给它的键的值,因此[]操作的结果可以为空。如果不以某种方式处理 null 情况(使用检查、显式非 null 强制转换或文档中涵盖的其他一些选项),您就不能将可空值分配给非空变量。