HashMap 错误 - containsKey, get
HashMap errors - containsKey, get
任何人都可以解释一下吗?
问题代码:
protected var table = HashMap<Class<*>, Double>()
if (table.containsKey(object)) {
value = table.get(object)
}
containsKey(K):Boolean is deprecated. Map and Key have incompatible
types. upcast to Any? if you're sure
所以我改成这样:
if (table.containsKey(object as Any?)
这修复了错误,但这是我应该做的来修复它吗?或者有更好的方法吗?
还有.get(object)
有错误:
Type inference failed. required: kotlin.Double found kotlin.Double?
同样的错误信息:
val c = someObject.javaClass // pre j2k code: final Class<? extends SomeClass> c = someObject.getClass();
weight = weightingTable[c] <-- error here
我不知道在这里做什么
containsKey
调用被报告为错误,因为您传递给它的参数类型与映射键的类型不匹配。您的地图包含 classes 作为键,并且您正试图将对象实例传递给它。将其更改为 object as Any?
不是一个有用的修复,因为此调用将编译但将始终 return false。您需要做的是使用 object.javaClass
来获取对象的 class。
weightingTable[c]
调用被报告为错误,因为映射不一定包含您传递给它的键的值,因此 []
操作的结果可以为空。如果不以某种方式处理 null 情况(使用检查、显式非 null 转换或 the documentation 中涵盖的其他选项),则不能将可空值分配给非 null 变量。
做的时候:
myHashMap.get(object)
并获得:
Type inference failed. required: kotlin.Double found kotlin.Double?
即使您已经使用 containsKey 检查过。您可以使用以下方法解决它:
myHashMap.getOrElse(key) { defaultValue }
任何人都可以解释一下吗?
问题代码:
protected var table = HashMap<Class<*>, Double>()
if (table.containsKey(object)) {
value = table.get(object)
}
containsKey(K):Boolean is deprecated. Map and Key have incompatible types. upcast to Any? if you're sure
所以我改成这样:
if (table.containsKey(object as Any?)
这修复了错误,但这是我应该做的来修复它吗?或者有更好的方法吗?
还有.get(object)
有错误:
Type inference failed. required: kotlin.Double found kotlin.Double?
同样的错误信息:
val c = someObject.javaClass // pre j2k code: final Class<? extends SomeClass> c = someObject.getClass();
weight = weightingTable[c] <-- error here
我不知道在这里做什么
containsKey
调用被报告为错误,因为您传递给它的参数类型与映射键的类型不匹配。您的地图包含 classes 作为键,并且您正试图将对象实例传递给它。将其更改为 object as Any?
不是一个有用的修复,因为此调用将编译但将始终 return false。您需要做的是使用 object.javaClass
来获取对象的 class。
weightingTable[c]
调用被报告为错误,因为映射不一定包含您传递给它的键的值,因此 []
操作的结果可以为空。如果不以某种方式处理 null 情况(使用检查、显式非 null 转换或 the documentation 中涵盖的其他选项),则不能将可空值分配给非 null 变量。
做的时候:
myHashMap.get(object)
并获得:
Type inference failed. required: kotlin.Double found kotlin.Double?
即使您已经使用 containsKey 检查过。您可以使用以下方法解决它:
myHashMap.getOrElse(key) { defaultValue }