相关疑难解决方法(0)

重载分辨率歧义HashMap.get Kotlin

我刚刚将Android Q SDK更新为android studio中的修订版2,现在从哈希图中获取值时出现错误

在此处输入图片说明

it是的HashMap<String,String>,这段代码很好,直到我在android studio中更新到Q版本2为止。

这是我的HashMap的来源

val map = HashMap<String,String>()
map["owner"] = shipment.owner
map["current"] = signedInUser
shipmentOwnedLiveData.postValue(map)
Run Code Online (Sandbox Code Playgroud)

我发现了一个与此类似的问题,但与Android无关,并且已有几年历史了

任何人都知道问题是什么或如何解决?

编辑:

似乎它也破坏了ArrayLists,因为调用.contains.remove对集合也抛出歧义错误。

似乎所有这些方法都有重复的方法

编辑2:

看来我不是唯一遇到此问题的人

https://issuetracker.google.com/issues/139041608#comment3

android kotlin android-studio

10
推荐指数
2
解决办法
629
查看次数

Kotlin:当Java库具有原始类型和盒装类型的重载时,我该怎么办?

例如,FastUtil IntArrayList有一个push接受int(原始)和Integer(盒装)的方法,但Kotlin认为它们都是相同的函数push(Int),因此我根本不能使用该函数,因为函数是模糊的.

当Java库对基本类型和盒装类型都有重载时,我该怎么办?

(ps我知道我可以使用这个add(int)方法.如果我将来遇到这样的问题,我正在寻找该怎么做.)

overloading kotlin

8
推荐指数
2
解决办法
2140
查看次数

为什么Java方法的Integer参数映射到Int而不是平台类型?

灵感来自另一个问题.

fastutil库中有IntArrayList一个类,它有一个带有以下Java签名的方法:

public void push(Integer o)
Run Code Online (Sandbox Code Playgroud)

来自Kotlin,它被视为

push(o: Int)
Run Code Online (Sandbox Code Playgroud)

是否有特定原因Int而不是平台类型Int!

我预计它push(o: Int!)至少是因为在项目中使用Kotlin源在Java源代码中定义的相同签名的方法具有Int!从Kotlin看到的参数类型(甚至在不同的模块中定义,甚至从该模块的jar中导入!).

此外,所描述的行为导致push(Integer o)push(int o)具有Int参数合法的(在同一类中)冲突- 它们都被视为push(o: Int).如果有Int!Integer,就没有冲突(我也试过在我的代码来定义这个对方法-仍然是如我所料,有Int!).


Kotlin版本是1.0.2.

Gradle依赖fastutil:

compile group: 'it.unimi.dsi', name: 'fastutil', version: '7.0.12'
Run Code Online (Sandbox Code Playgroud)

java parameters kotlin fastutil

8
推荐指数
1
解决办法
393
查看次数