如何在Kotlin中使用accessOrder创建LinkedHashMap



我正在尝试创建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中存在。

这里的问题是您使用命名参数调用它。Java api不支持。

在JVM上调用Java函数时,不能使用命名参数语法,因为Java字节码并不总是保留函数参数的名称。

所以Kotlin确实没有找到任何Java构造函数。它只查找Kotlin中声明的那些常见的。

您需要删除参数名称:

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

相关内容

  • 没有找到相关文章

最新更新