java 如何在Kotlin中使用accessOrder创建LinkedHashMap

dbf7pr2w  于 2023-04-04  发布在  Java
关注(0)|答案(1)|浏览(137)

我尝试创建一个新的LinkedHashMap示例,如下所示:

class LRUCache<K, V>(
    private val size: Int
) {
    private val cache = LinkedHashMap<K, V>(size, loadFactor = 0.75F, accessOrder = true)
}

但它不会编译,报告错误:

Kotlin: None of the following functions can be called with the arguments supplied: 
public constructor LinkedHashMap<K : Any!, V : Any!>(p0: (MutableMap<out TypeVariable(K)!, out TypeVariable(V)!>..Map<out TypeVariable(K)!, TypeVariable(V)!>?)) defined in java.util.LinkedHashMap
public constructor LinkedHashMap<K : Any!, V : Any!>(p0: Int) defined in java.util.LinkedHashMap

看起来Kotlin“看不到”有三个参数的构造函数,但它存在于java中。

zfciruhq

zfciruhq1#

这里的问题是你使用命名参数来调用它。这是Java API不支持的。
在JVM上调用Java函数时,不能使用命名参数语法,因为Java字节码并不总是保留函数参数的名称。
所以Kotlin确实找不到任何Java构造函数,它只找到在Kotlin中声明的常见构造函数。
您需要删除参数名称:

LinkedHashMap<K, V>(size, 0.75f, true)

相关问题