Kotlin HashMap错误-Containeskey,get

Kotlin HashMap错误-Containeskey,get,kotlin,Kotlin,有人能解释一下吗 问题代码: 它修复了错误,但这是我应该做的来修复它吗?还是有更好的办法 另外,.get(object)有一个错误: 类型推断失败。必需:kotlin.Double找到kotlin.Double 同样的错误消息: val c = someObject.javaClass // pre j2k code: final Class<? extends SomeClass> c = someObject.getClass(); weight = weightingTable

有人能解释一下吗

问题代码: 它修复了错误,但这是我应该做的来修复它吗?还是有更好的办法

另外,
.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

val c=someObject.javaClass//j2k之前的代码:final Class调用
containsKey
报告为错误,因为传递给它的参数类型与映射键的类型不匹配。您的映射包含类作为键,并且您正在尝试向其传递对象实例。将其更改为
对象作为任何对象?
不是一个有用的修复方法,因为此调用将编译,但始终返回false。您需要做的是使用
object.javaClass
获取对象的类

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

执行以下操作时:

myHashMap.get(object)
并获得:

Type inference failed. required: kotlin.Double found kotlin.Double?
即使你已经和containsKey联系过了。您可以使用以下方法解决此问题:

myHashMap.getOrElse(key) { defaultValue }

对象的类型是什么?
?好问题。。它是我创建的Java类的一个内部类(不是
someClass
,让我们称它为
SomeClassWithAnInnerClass.InnerClass
)Map.get返回一个可为空的值(无论您是否检查了contains),因为编译器不能保证条目将在映射中。所以值的类型应该是Double?我不太明白为什么它是可以为null的,无论在哪里我都将
Double
声明为
Double
而不是
Double?
protectedvar-weightingTable=HashMap()
var-weight:Double
我作弊并使用了
这样我就可以保留
Double
声明(我确实尝试了
Double?
,但这使得代码更加混乱,因为我这样做时它不喜欢我的数学和比较运算符,所以现在我的解决方案是使用
!!
)正如答案所解释的那样,它可以为null,因为映射不包含每个可能键的值<代码>[]
当给定的键没有对应的值时返回null。啊,这是有道理的…我没有直截了当地思考,因为我想的是我输入的内容,而不是如何检查该键是否不存在
Type inference failed. required: kotlin.Double found kotlin.Double?
myHashMap.getOrElse(key) { defaultValue }