我正在尝试创建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)